私はエンティティを持っています。それをXとしましょう(エンティティは@Id idを持ちます)。 エンティティはテーブルにマップされています。それをX_TABLEとしましょう。 また、私は次のコードで働いているテーブルがHibernateのネイティブクエリによって時々更新されない
@ManyToOne
@JoinColumn(name = "JOIN_COLUMN")
YClass joinColumn;//another entity
含まれています、
X x = new X(xDTO);//just a copy constructor, nothing fancy, without id
x.joinColumn = null;
entityManager.persit(x);
entityManager.flush();
join_column_id = somne_function();//irelevant
Query q = entityManager.createNativeQuery(
"UPDATE X_TABLE t SET t.JOIN_COLUMN=" + join_column_id + " WHERE " + " t.id= " + x.getId());
q.executeUpdate();
q.flush();
これを行うことでポイントをする場合には、誰もが疑問に思っている、join_columnは別のテーブルへの外部キーであることです他のデータベースでは、対応するテーブルがX_TABLEを含む同じデータベースに存在しないため、ネイティブクエリで設定しています。しかし、これは問題ではありません。 enitityマッピングと関係はすべていいです、私はそれを保証することができます。
上記のコードは、ループ内のいくつかのレコードに対して実行され、すべてのレコードに対して細かい動作(テーブルの保存と更新)を行うことがあります。しかし、ループ内の最後のレコード(レコードを保存するという意味で、がデータベース内の更新を実行しないという意味)を除くすべてのレコードで正常に動作することがあります。 例外がスローされたがあり、JBossサーバーのデバッグログ(hibernate用)は、正しい値でUPDATEがエラーなしで行われていることを示しています。しかし、テーブルにはJOIN_COLUMNに1つのレコードだけのnullが含まれています。なぜ私は理想的な理由がありません。何かご意見は?
PS:サービスはコンテナ管理トランザクションです。