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

使用しているCompoundKeyクラスのコードを投稿できますか。私の推測では、複合主キークラスにequalsメソッドとhashCodeメソッドが正しく実装されていません。

于 2012-06-25T19:51:21.273 に答える