我的代码中似乎有一些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();
}
}
如果有任何建议,我将不胜感激。
答案 0 :(得分:1)
我怀疑你遇到了页面限制/并发锁定问题 - 所有这些工作都是在一个事务中执行的。是否有任何理由不以较小的批次(如10,000提及 - 如你所述)和汇总结果执行?
答案 1 :(得分:0)
StackOverflow最好的部分之一就是努力将问题缩小到足以发布。我经常在没有发帖的情况下找到答案。
不幸的是,这次我发布后发现了自己的错误。这个问题是遗留数据不良和我日志消息不佳的结合。
我希望您没有花太多时间查看代码。