0

我的代码中似乎“泄漏”了一些 Hibernate 资源。
伪代码
对于 20,000 多条记录中的每
一条 使用 Criteria 和示例实体查找记录 将
新对象添加到实体上的集合中 将
带有新对象的实体保存到数据库

问题
示例实体的查找在记录 12,764 处失败。如果我在测试用例中只执行那个 find ,它就会被成功检索。如果我将输入文件分成多个文件,每个文件有 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

我怀疑您遇到了页面限制/并发锁定问题 - 所有这些工作都在一个事务中执行。是否有任何理由不以较小的批次(如您提到的 10,000 个)和汇总结果执行?

体面的资源

于 2013-04-20T16:41:06.760 回答
0

StackOverflow 最好的部分之一是努力将问题缩小到足以发布的程度。我经常在这个过程中找到答案,但从未发布过。

不幸的是,这次我在发布后发现了自己的错误。问题是我的不良遗留数据和不良日志消息的结合。

我希望您没有花太多时间查看代码。

于 2013-04-20T17:36:37.100 回答