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 セッションを閉じるとロックが解除されますか? それはどのように機能していますか?春のトランザクションコンテキストの問題ですか?

4

0 に答える 0