2012-06-25 48 views
1

我有一個JPA/Hibernate對象,它使用複合鍵作爲主鍵。我正在嘗試從數據庫讀取對象並進行更新。JPA /休眠 - x實例的標識符被更改異常

可以說主鍵是(id和name),並且數據庫中存在以下行。

1 john London 
2 bob Birmingham 
3 Dave Kent 

如果我使用鍵(1,約翰)加載對象,然後一切正常。

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,約翰),然後我得到下面的異常加載它主鍵列。有趣的是,如果我搜索一個不存在的行,我不會得到這個異常。它只會發生,如果我搜索一個確實存在的行,但在密鑰上使用的情況與實際在數據庫中不同。

什麼可能導致這種情況,我該如何解決它?

謝謝

+0

mysql? (更多的字符,只是忽略) – esej

回答

2

您可以發佈您正在使用的複合密鑰類的代碼。我的猜測是,你在複合主鍵類上有一個糟糕的equals和hashCode方法。

+0

謝謝 - 你是對的。問題與quals方法中的登錄有關。 equals()方法用於比較字符串而不是equalsIgnoreCase()。 – ziggy