jpa query.getResultList()被卡住,没有错误

时间:2011-10-12 13:53:12

标签: jpa

我有一个奇怪的例子,我在JPA2.0中编写了一个简单的代码来查询DB

一切似乎都很好,但是当代码遇到query.getResultList();

它只是卡住并且没有响应,然后glassfish服务器获得大约20%的CPU

然后没有任何反应,也不会产生任何错误或日志。

出了什么问题?

我正在使用glassfish,EclipseLink,NetBeans

这是我的代码:

public List<?> getData(EntityManager em,Class entityClass){
Query query=em.createQuery("select entity from tblPromotions entity");
return query.getResultList();
}

提前致谢

2 个答案:

答案 0 :(得分:0)

尝试调试它,哪里卡住了? (kill或ctrl c打印堆栈跟踪,或使用调试器)

同时将登录视为最佳。

它可能是一个数据库锁,因为它是一个读取,你必须使用某种序列化的事务隔离,这可能是一个坏主意。

表中的对象如何,可能需要很长时间。

答案 1 :(得分:0)

在我的情况下调试到Hibernate后,我发现查询只返回了太多的行来处理。 所以通过为Max Results设置一些值来解决它:

SELECT o.*
 FROM Orders o 
 JOIN OrderStatus os
   ON o.order_id = os.order_id
 JOIN Status s
   ON os.status_id = s.status_id   -- JOIN your three tables

 JOIN (SELECT order_id, MAX(createdTime) as last_time
       FROM OrderStatus 
       GROUP BY order_id ) t       -- this will give you the last status
   ON o.createdTime = t.last_time   
 WHERE s.name = $statusName        -- select only the ones with $statusName

btw:总是在这种情况下尝试调试框架,它可以给你答案:&gt;