JPA 2.0 標準を使用しており、永続化プロバイダーとして休止状態になっています。ElementCollections を使用しているときに、なぜ org.hibernate.collection.PersistentSet を更新できないのか知りたいと思っています。
PersistentSet の isRowUpdatePossible() メソッドは false を返します。更新可能な PersistentList と比較すると、Set は単なる更新ではなく複数の削除と挿入を実行します。
たとえば、エンティティが現在値 {1, 2, 3} を持つ Set を持っているとします。セットをクリアしてから {4, 5, 6} を追加して、セットを更新します。entityManager.merge(entity) 3 を呼び出すと、削除クエリと挿入クエリが実行されます。
上記の例でリストを使用すると、バインド値を使用して更新クエリが 1 つだけ実行されます。
クエリの数により、データベースが列の重複を回避できる場合は、リストを使用するという結論に至りました。
質問を要約すると
- org.hibernate.collection.PersistentSet が更新できないのはなぜですか? PersistentSet の isRowUpdatePossible() メソッドは false を返します。
- データベースが重複を処理できる場合、リストはセットよりも優れていますか?
これらの質問についての考えをいただければ幸いです。