【发布时间】:2019-07-22 07:55:32
【问题描述】:
我的应用程序存在内存泄漏问题,所以我使用 JProfiler 查找原因。在使用session.createSQLQuery()时,我发现问题是由Hibernate中的本机sql引起的。
其他人有同样的问题吗?如何解决问题?我必须在 Hibernate 中使用原生 SQL,因为 HQL 不符合我的要求。
泄露的类是HashMap,根本原因是org.hibernate.hql.internal.ast.tree.selectexpressionimpl。我发现它在createSQLQuery() 方法中使用。
由于我的表名多种多样(200+表),无法为每个表创建一个POJO,所以我需要在Hibernate中使用原生SQL。我应该怎么办?有什么想法吗?
我在这里放了一些代码:
session = HibernateUtil.getSession();
session.beginTransaction();
for (int i = 0; i < list.size(); i++) {
String sql = (String) list.get(i);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Query query = session.createSQLQuery(sql);
query.setParameter(0, new Date());
query.setParameter(1, new Date());
//query.setParameter(2, format.format(new Date()));
query.executeUpdate();
}
session.getTransaction().commit();
b = true;
我在 JProfiler 中的检查显示内存泄漏:
我发现内存泄漏发生在插入/更新 SQL 查询中,而不是在选择查询中。
【问题讨论】:
-
请贴一些代码