3

我正在尝试保存一个实体

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事务上下文的问题吗?

4

0 回答 0