我正在尝试保存一个实体
protected void initRequest(T data) {
Request request = new Request();
data.setPosRequest(request);
request.setTimeStamp(new DateTime());
request.setType(REQUEST);
Session session = sessionFactory.getCurrentSession();
session.save(request);
logger.info("Newly created request: {}", request);
}
protected List<Request> getRequests(){
return (List<Request>) sessionFactory.
getCurrentFactory().
createQuery("from Requests").
list();
}
此方法是从 Spring 事务上下文中调用的
@Transactional(noRollbackFor=Exception.class, propagation=Propagation.REQUIRES_NEW)
public void run() {
.
.
initRequest(data);
.
.
if (data.areRequestsNeeded()){
List<Request> requests = getRequests();
}
}
事务开始并提交没有任何问题,但问题是即使在 Hibernate 会话关闭后创建的锁仍未释放,当我想从该表中选择数据时会导致问题
Error performing load command : org.hibernate.exception.LockAcquisitionException: lock could not be obtained within the time requested
我正在使用 Spring 4.0.1.、Hibernate 4、Derby 10.10.1.1。
Hibernate 会话关闭是否释放锁?它是如何工作的?是spring事务上下文的问题吗?