gpt4 book ai didi

java - "session.createSQLQuery()"方法是否存在内存泄漏?如何解决呢?

转载 作者:行者123 更新时间:2023-12-02 02:46:18 25 4
gpt4 key购买 nike

我的应用程序存在内存泄漏问题,因此我使用 JProfiler 来查找原因。我发现问题是在使用session.createSQLQuery()时Hibernate中的 native sql引起的。

还有人有同样的问题吗?如何解决问题?我必须在 Hibernate 中使用原生 SQL,因为 HQL 不能满足我的要求。

泄露的类是HashMap,其根本原因与org.hibernate.hql.internal.ast.tree.selectexpressimpl类似。我发现它在 createSQLQuery() 方法中使用。

由于我的表名多种多样(200+表),无法为每个表创建一个POJO,所以我需要在Hibernate中使用 native 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 中的检查显示内存泄漏:

enter image description here

我发现内存泄漏发生在插入/更新 SQL 查询中,而不是选择查询中。

最佳答案

问题是由于在 QueryPlanCache 中添加了不可用的键造成的。此问题已在较新的 hibernate 版本中得到修复。

此 jira 票证中提供了更多详细信息:https://issues.jboss.org/browse/JBPAPP-4579

关于java - "session.createSQLQuery()"方法是否存在内存泄漏?如何解决呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com