オブジェクトの一括挿入を試みていListます。ID が自動生成されるように構成されています。以前は、次のものがありました。
<id name="entryId" type="integer" column="ENTRY_ID">
<generator class="seqhilo">
<param name="sequence">HB_ENTRY_ID_SEQ</param>
<param name="max_lo">50</param>
</generator>
</id>
私の挿入クエリは次のとおりです。
try (Session session = sessionFactory.openSession()) {
session.beginTransaction();
for (int i = 0; i < insertList.size(); i++) {
session.save(insertList.get(i));
if (i % 100 == 0) {
session.flush();
session.clear();
}
}
session.getTransaction().commit();
return insertList.size();
}
正しいbatch_sizeプロパティ値も設定されています。上記は正常に機能しましたが、最近、コードを注釈ベースに変更したところ、次のようになりました。
@Id
@Column(name = "ENTRY_ID")
@GeneratedValue(generator = "hibSeq", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "hibSeq", sequenceName = "HB_ENTRY_ID_SEQ", allocationSize = 100)
今これを実行すると、挿入はorg.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session
こことここでこのエラーを理解しようとしましたが、問題を解決できませんでした。私が知る限りsession.flush()/clear()、シーケンス ジェネレーターが既に使用されている ID をリサイクルする段階で何かが起こっています。
私は何を間違っていますか?