List
のオブジェクトを一括して挿入しようとしています。 IDが自動生成されるように設定されています。自動生成ID付きオブジェクトを一括挿入しようとするとNonUniqueObjectExceptionが発生する
<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>
そして、次のように私のINSERTクエリは::以前、私は次のように持っていた
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
をスローしますこのエラーをhereおよびhereとして理解していますが、問題を解決できませんでした。私が知る限りでは、シーケンスジェネレータがすでに使用されているIDをリサイクルさせる何かがsession.flush()/clear()
ステージで起こっています。
私は間違っていますか?