gpt4 book ai didi

java - Hibernate Criteria查询使Tomcat在几次请求服务后变得无响应

转载 作者:行者123 更新时间:2023-11-29 05:45:26 26 4
gpt4 key购买 nike

我在 Tomcat 7.0.35(Spring 3.1、Hibernate 3.6.1、JPA 2.0)上运行 Spring + Hibernate 网络应用程序。

此应用程序有一个页面,可通过 Hibernate 的条件从数据库中获取数据(我知道我不必这样做)。服务层只是调用数据层。这是代码:

    Criteria criteria = sessionFactory.openSession().createCriteria(Article.class); 
criteria.addOrder(Order.desc("updatedTime"));
criteria.add(Restrictions.eq("account", acc));
criteria.add(Restrictions.eq("draft", true));
criteria.setMaxResults(1);
Article s = (Article) criteria.uniqueResult();
return s;

Tomcat 只能处理来自该页面的几个请求,然后它变得无响应。我可以看到浏览器一直在等待服务器响应(Firefox 状态栏显示“正在等待主机”。)

我没有看到任何错误消息,例如 OutOfMemory 等。浏览器似乎一直在等待。

如果我将其更改为 JPA,如下所示:

    @NamedQuery(name = "Article.getMostRecentDraftArticle", query = "select x from Article x where x.account = :account and x.draft = 1 order by x.updatedTime desc"),

.....

Query q = getSession().getNamedQuery("Article.getMostRecentDraftArticle");
q.setParameter("account", acc);
q.setMaxResults(1);
List list = q.list();
if (list.size() == 0)
return null;
else
return (Article) list.get(0);

然后一切正常。

我使用 Hibernate 的 Criteria API 会出现什么问题?

感谢任何输入!

干杯。

最佳答案

您还没有关闭 session 。看到这个答案:https://stackoverflow.com/a/4049758/116509

并阅读org.hibernate.session的javadoc:

A typical transaction should use the following idiom:

 Session sess = factory.openSession();
Transaction tx;
try {
tx = sess.beginTransaction();
//do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
throw e;
}
finally {
sess.close();
}

关于java - Hibernate Criteria查询使Tomcat在几次请求服务后变得无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018916/

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