Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠+;调用复合id的getter时发生Ehcache-IllegalArgumentException_Java_Hibernate_Jpa_Orm_Ehcache - Fatal编程技术网

Java 冬眠+;调用复合id的getter时发生Ehcache-IllegalArgumentException

Java 冬眠+;调用复合id的getter时发生Ehcache-IllegalArgumentException,java,hibernate,jpa,orm,ehcache,Java,Hibernate,Jpa,Orm,Ehcache,在这里搜索了很多,没有发现任何类似的案例,如果我错了,对不起 我的上下文是一个使用Hibernate和二级缓存的系统 以前使用过这些版本(使用二级缓存进行生产已超过一年): hibernate-ehcache-5.0.9.最终版本 ehcache-core-2.4.3 ehcache-2.9.0 hibernate-core-5.0.9.Final 其他 现在,升级系统时,我们将版本更改为: hibernate-ehcache-5.2.10.Final ehcache-2.10.3 hib

在这里搜索了很多,没有发现任何类似的案例,如果我错了,对不起

我的上下文是一个使用Hibernate和二级缓存的系统

以前使用过这些版本(使用二级缓存进行生产已超过一年):

  • hibernate-ehcache-5.0.9.最终版本
  • ehcache-core-2.4.3
  • ehcache-2.9.0
  • hibernate-core-5.0.9.Final
  • 其他
现在,升级系统时,我们将版本更改为:

  • hibernate-ehcache-5.2.10.Final
  • ehcache-2.10.3
  • hibernate-core-5.2.10.Final
  • 其他
更新Hibernate和Ehcache版本后,开始出现上述异常:


org.hibernate.PropertyAccessException:IllegalArgumentException调用br.com.mycompany.myproject.mypackage.Employee.id的getter时发生
位于org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:64)
位于org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
位于org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4720)
位于org.hibernate.type.EntityType.toLoggableString(EntityType.java:519)
位于org.hibernate.type.TypeHelper.toLoggableString(TypeHelper.java:439)
位于org.hibernate.cache.spi.entry.StructuredCacheEntry.destructure(StructuredCacheEntry.java:54)
位于org.hibernate.event.internal.DefaultLoadEventListener.processCachedEntry(DefaultLoadEventListener.java:612)
位于org.hibernate.event.internal.DefaultLoadEventListener.loadFromSecondLevelCache(DefaultLoadEventListener.java:602)
位于org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:462)
位于org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219)
位于org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:116)
位于org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89)
位于org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1230)
位于org.hibernate.internal.SessionImpl.immediateLoad(SessionImpl.java:1088)
位于org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:155)
位于org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:259)
位于org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:73)
在br.com.mycompany.myproject.mypackage.Employee$\u jvstdd0\u 3.isActive(Employee$\u jvstdd0\u 3.java)
在br.com.mycompany.myproject.mypackage.Test.do(Test.java:30)
位于org.jpos.transaction.TxnSupport.prepare(TxnSupport.java:44)
位于org.jpos.transaction.TransactionManager.prepare(TransactionManager.java:549)
位于org.jpos.transaction.TransactionManager.prepare(TransactionManager.java:615)
位于org.jpos.transaction.TransactionManager.run(TransactionManager.java:291)
位于java.lang.Thread.run(未知源)
原因:java.lang.IllegalArgumentException:java.lang。ClassCastException@32ed9549
位于sun.reflect.GeneratedMethodAccessor43.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:41)
... 23多
我的模型实体(为示例而创建):

@实体
@表(name=“employee”)
@缓存(用法=cacheconcurrentystrategy.READ_ONLY,region=“myregion”)
公共类Employee实现可序列化的{
私有静态最终长serialVersionUID=8467432396096896736L;
@嵌入ID
私人雇员id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“id_company”,nullable=false,insertable=false,updateable=false)
私营公司;
获取和设置
equals&hashcode
...
}
@可嵌入
公共类EmployeeID实现可序列化的{
私有静态最终长serialVersionUID=8467432396096896736L;
@列(name=“id\u employee”,null=false,insertable=false,updateable=false)
私人长期雇员;
@列(name=“id_company”,null=false,insertable=false,updateable=false)
私营公司;
获取和设置
equals&hashcode
...
}

我验证(进行测试)当hibernate尝试从缓存中水合实体时,会发生此错误。如果我关闭缓存,它就会工作。

因此,当回滚版本时,它会在启用缓存的情况下再次工作。


当我的所有实体都有复合键并且都在二级缓存中时,就会发生这种情况

您必须调试并检查为什么Hibernate在运行期间抛出
ClassCastException
。这可能是某种错误

然而,我也注意到了您的映射中的一个奇怪之处。为什么
@EmbeddedId
属性和
@ManyToOne
@JoinColumn
都设置为
insertable=false
updateable=false

这将使员工永远无法坚持和
员工
或更改其
公司


正如我在中所解释的,
@EmbeddedId
应该插入并更新复合标识符,而
@ManyToOne
应该使用
@MapsId

我已经按照您所说的方法查看了映射,使用@MapsId,但是错误仍然存在(只需提及)。然而,作为证明,我将注释从“get”方法更改为属性。现在的错误更改是:
“通过反射访问持久属性id的私有字段时出错:[Ljava.lang.Object;@715ef487”>”
,原因是:java.lang.IllegalArgumentException:无法