コード
for (int i=0; i<10; i++) {
SomeClass anObj = new SomeClass();
anObj.setField(i);
anObj.setAnotherField("XYZ"+i);
session.save(anObj);
}
session.getTransaction().commit();
エラーなしで実行されており、10行をテーブルに追加しています。これは私が望むものです。fieldはSomeClassの主キーです。
宣言を外側に移動すると:
SomeClass anObj = new SomeClass();
for (int i=0; i<10; i++) {
anObj.setField(i);
anObj.setAnotherField("XYZ"+i);
session.save(anObj);
}
session.getTransaction().commit();
「SomeClass のインスタンスの識別子が変更されました」というエラーが表示されます。
このことから私が「読んだ」のは、Hibernate がオブジェクトをデータベースに保存した後もオブジェクトのキー フィールドを監視していることです。
オブジェクトを保存したら、コード内のオブジェクトをそのままにしておく必要があると思いますが、これは意味がありません。
その背後に何があるのか 気になります。
save()の属性または別の保存モードでこれを回避する方法はありますか? ループの繰り返しごとにanObjを再宣言したくありません。