我有一个奇怪的例子,我在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();
}
提前致谢
答案 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;