我的代码中的Hibernate资源泄漏

时间:2013-04-20 16:18:04

标签: hibernate

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

问题
带有示例实体的find在记录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();
        }
    }

如果有任何建议,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

Decent Resources

答案 1 :(得分:0)

StackOverflow最好的部分之一就是努力将问题缩小到足以发布。我经常在没有发帖的情况下找到答案。

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

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