1

我有一个使用复合键作为主键的 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 更新它,但我不更新任何主键列。有趣的是,如果我搜索不存在的行,我不会得到那个异常。仅当我搜索确实存在但键上使用的大小写与数据库中实际不同的行时才会发生这种情况。

可能是什么原因造成的,我该如何解决?

谢谢

4

1 回答 1

3

您能否发布您正在使用的复合键类的代码。我的猜测是你在复合主键类上有一个糟糕的 equals 和 hashCode 方法。

于 2012-06-25T19:51:21.273 回答