Java JPA/Hibernate-x实例的标识符被更改为异常

Java JPA/Hibernate-x实例的标识符被更改为异常,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我有一个JPA/Hibernate对象,它使用复合键作为主键。我正在尝试从数据库读取对象并进行更新 假设主键是(id和name),数据库中存在以下行 1 john London 2 bob Birmingham 3 Dave Kent 如果使用键(1,john)加载对象,则一切正常。如果我使用相同的主格加载它,但使用(1,John)的大小写不同,则会出现以下异常: org.hibernate.HibernateException: identifier of an i

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

1   john   London
2   bob    Birmingham
3   Dave   Kent
这可能是什么原因造成的?如何解决


谢谢

您可以发布您正在使用的复合键类的代码吗。我的猜测是,在复合主键类上实现了一个糟糕的equals和hashCode方法。

mysql?(更多角色,忽略)谢谢-你是对的。问题与quals方法中的登录有关。方法equals()用于比较字符串,而不是equalsIgnoreCase()。