2013-04-20 54 views
0

我的代码中似乎有一些Hibernate资源的“泄漏”。
伪代码
对于每20,000记录
使用标准用一个例子实体
查找记录添加一个新的对象来收集关于实体
保存新对象到数据库我的代码中存在Hibernate资源泄漏

实体

问题
查找示例实体失败,记录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

某些堆栈跟踪会有所帮助。 – 2013-04-20 16:27:45

回答

1

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

Decent Resources

+0

感谢您的时间和链接到博客。 – 2013-04-20 17:39:51

0

一个StackOverflow上的最好的部分是让问题上下足小张贴的努力。我经常在那个过程中找到答案,但没有发布过。

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

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