0

オブジェクトの一括挿入を試みてい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 をリサイクルする段階で何かが起こっています。

私は何を間違っていますか?

4

1 に答える 1