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