当前位置: 首页 > 知识库问答 >
问题:

获取java。lang.ClassCastException与ehcache的所有Hibernate实体类

田成化
2023-03-14

我使用的是“1.7.0_79”版本。获取以下异常

2016-11-17 16:42:54,127 : ERROR: net.sf.ehcache.store.disk.DiskStorageFactory - Disk Write of

数据\成员\密钥失败:java。例外:太阳。反映无法将GeneratedSerializationConstructorAccessor1强制转换为sun。反映sun上的SerializationConstructorAccessorImpl。反映MethodAccessorGenerator。generateSerializationConstructor(MethodAccessorGenerator.java:113)在输入代码。反映反射工厂。java上的newConstructorForSerialization(ReflectionFactory.java:331)。木卫一。ObjectStreamClass。java上的getSerializableConstructor(ObjectStreamClass.java:1376)。木卫一。ObjectStreamClass。在java上访问$1500(ObjectStreamClass.java:72)。木卫一。ObjectStreamClass$2。在java上运行(ObjectStreamClass.java:493)。木卫一。ObjectStreamClass$2。在java上运行(ObjectStreamClass.java:468)。安全访问控制器。java上的doPrivileged(本机方法)。木卫一。ObjectStreamClass。(ObjectStreamClass.java:468)在java。木卫一。ObjectStreamClass。在java上查找(ObjectStreamClass.java:365)。木卫一。ObjectOutputStream。java上的WriteObject 0(ObjectOutputStream.java:1133)。木卫一。ObjectOutputStream。net上的writeObject(ObjectOutputStream.java:347)。旧金山。ehcache。util。MemoryEfficientByteArrayOutputStream。在net上序列化(MemoryEfficientByteArrayOutputStream.java:97)。旧金山。ehcache。百货商店磁盘DiskStorageFactory。net上的序列化元素(DiskStorageFactory.java:405)。旧金山。ehcache。百货商店磁盘DiskStorageFactory。在net上写入(DiskStorageFactory.java:384)。旧金山。ehcache。百货商店磁盘DiskStorageFactory$DiskWriteTask。在网络上调用(DiskStorageFactory.java:485)。旧金山。ehcache。百货商店磁盘DiskStorageFactory$PersistentDiskWriteTask。在net上调用(DiskStorageFactory.java:1088)。旧金山。ehcache。百货商店磁盘DiskStorageFactory$PersistentDiskWriteTask。在java上调用(DiskStorageFactory.java:1072)。util。同时发生的未来任务。在java上运行(FutureTask.java:262)。util。同时发生的ScheduledThreadPoolExecutor$ScheduledFutureTask。在java上访问$201(ScheduledThreadPoolExecutor.java:178)。util。同时发生的ScheduledThreadPoolExecutor$ScheduledFutureTask。在java上运行(ScheduledThreadPoolExecutor.java:292)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1145)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:615)。朗。丝线。运行(Thread.java:745)

jpa。xml

<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.abc.xyz" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.hbm2ddl.auto">validate</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.connection.isolation">2</prop>
                <!-- should be turned off in production -->
                <prop key="hibernate.generate_statistics">false</prop>

                <!-- This is the provider for Ehcache provided by Hibernate, using the "old" SPI -->
                <prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
                <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>
                <prop key="hibernate.cache.use_second_level_cache">true"</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>


            </props>
        </property>
    </bean>

ehcache。xml

<?xml version="1.0" encoding="UTF-8"?>

<ehcache>
    <diskStore path="java.io.tmpdir"/>

    <cache name="org.hibernate.cache.spi.UpdateTimestampsCache"
           maxElementsInMemory="50000"
           eternal="true"
           overflowToDisk="true"/>

    <cache name="org.hibernate.cache.internal.StandardQueryCache"
           maxElementsInMemory="50000"
           eternal="false"
           timeToIdleSeconds="120"
           timeToLiveSeconds="120"
           overflowToDisk="true"
           diskPersistent="false"
               diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LRU"
            />

    <defaultCache
            maxElementsInMemory="50000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />

</ehcache>

有人知道这个问题的解决方案吗。


共有1个答案

程亦
2023-03-14

您有一个类加载器问题。

发生此错误的唯一方法是,如果您当前正在序列化的类来自一个类加载器,该类加载器没有看到当前序列化器使用的SeriazationConstructorAccessorImpl

如果不知道你正在经历这个错误的环境,我不能说更多。

我猜您正在使用JDK 1.6。

 类似资料:
  • 问题内容: 我目前正在研究如何在ehcache中使用RMI分发选项。我已经正确配置了ehcache.xml,复制似乎可以正常工作。但是我有两个问题: ->似乎ehcache /hibernate为每个实体创建1个缓存。很好,但是当复制到位时,它会创建1个线程/缓存进行复制。这是预期的行为吗?由于我们的域很大,因此它创建了大约300个线程,在我看来,这确实很大 ->另一个令人讨厌的结果是,心跳消息似

  • 我有根实体及其单个关联。 当我获取实体时,我需要急切地获取,但只有的3个属性:userId、afstName、lastName。 现在我的标准查询是: 接下来,我执行,我得到了sql语句,它只选择了投影列表中指定的的3个属性。但它不选择根<code>Hostel</code>实体的任何属性。生成的查询为: 此查询不起作用,因为它返回五个空的。五个映射是因为有五个<code>Hostel</code

  • 问题内容: 我有一段维护代码,应该在某些时间点向某些用户授予选择特权: 我想对所有表执行此操作。我可以在Oracle或MySQL中使用它来获取完整列表,然后像这样继续前进。 但是由于我已经有了对象,所以我想知道是否还有另一种方法来获取所有映射的实体,经理知道(我正在使用Hibernate进行内部编程)。 问题答案: 我可以通过两种方式获取所有映射的实体及其对应的SQL表(可能还有其他)。 最直接的

  • 尝试在JBoss上部署应用程序时出现以下错误: 无法启动的服务:服务jboss.undertow.deployment.default-server.default-host./naturallatex-rest:java.lang.runtimeexception:org.springframework.beans.factory.beancreationexception:创建类路径资源[or

  • 我有一个名为Attributes的类,它有如下所列的一些实例变量:

  • 问题内容: 在我从事的项目中,我不使用Spring,而仅使用Hibernate。我不想将hbm.xml文件用于实体映射/描述/等。我只想使用注释。 如何告诉Hibernate 从某些包中加载所有带注释的类? 我在网上搜索,但没有运气。我也找不到有关最新的Hibernate版本的信息(大多是过时的文章/帖子/等)。 编辑1: http://docs.jboss.org/hibernate/orm/4