0

私のコードでいくつかの Hibernate リソースの「リーク」があるようです。
疑似コード
20,000 以上のレコードのそれぞれについて
エンティティの例で Criteria を使用してレコードを検索する エンティティ
のコレクションに新しいオブジェクトを追加する 新しいオブジェクトを含む
エンティティをデータベースに保存する

問題
サンプル エンティティによる検索は、レコード 12,764 で失敗します。テストケースでその検索だけを実行すると、正常に取得されます。入力ファイルをそれぞれ 10,000 レコードの複数のファイルに分割すると、すべてのレコードが処理されます。これは、データベースレコードを見つけるために使用しているコードです

try {
    // begin transaction
    ses = Activator.getSession();
    ses.beginTransaction();

    // find the object
    Criteria crit = getSession().createCriteria(getPersistentClass());
    Example example = Example.create(exampleInstance);
    for (String exclude : excludeProperty) {
        example.excludeProperty(exclude);
    }
    crit.add(example);
    foundEntities =  crit.list();

    for (T curT : foundEntities) {
        this.initHibernateEntity((I) curT);
    }

    // commit transaction
    ses.getTransaction().commit();
} catch // all exceptions
finally {
    if (ses != null && ses.isOpen()) {
            ses.close();
        }
    }

これがどこにあるのかについての提案をいただければ幸いです。

4

2 に答える 2

1

ページ制限/同時実行ロックの問題が発生していると思われます-そして、そのすべての作業が1つのトランザクションで実行されています。小さなバッチ (10,000 など) で実行して結果を集計しない理由はありますか?

適切なリソース

于 2013-04-20T16:41:06.760 に答える
0

StackOverflow の優れた点の 1 つは、投稿できるように問題を小さくする努力です。投稿せずにそのプロセスで答えを見つけることがよくあります。

残念ながら、今回は投稿後に自分の間違いを発見しました。この問題は、私の側の悪いレガシー データと不十分なログ メッセージの組み合わせでした。

コードを見るのに多くの時間を費やしていないことを願っています。

于 2013-04-20T17:36:37.100 に答える