我有一个JPA / Hibernate对象,它使用复合键作为主键。我试图从数据库中读取对象并进行更新。
假设主键是(id和name),并且数据库中存在以下行。
1 john London
2 bob Birmingham
3 Dave Kent
如果我使用键(1,john)加载一个对象,那么一切正常。如果我使用相同的主要加载它,但使用(1,John)的情况不同,那么我得到以下异常:
org.hibernate.HibernateException: identifier of an instance of Document was altered from com.myPck.test1.documentsPK[ Id=1, msgOwner=john ] to com.myPck.test1.documentsPK[ Id=1, msgOwner=John ];
我加载行后,我使用JPQL更新它,但我不更新任何主键列。有趣的是,如果我搜索不存在的行,我不会得到该异常。只有在我搜索确实存在的行但密钥上使用的案例与数据库中的实际情况不同时才会发生这种情况。
可能导致这种情况的原因以及如何解决?
由于
答案 0 :(得分:2)
您可以发布您正在使用的Compound Key类的代码吗?我的猜测是你在复合主键类上有一个严重实现的equals和hashCode方法。