0
에 거래 패턴을 캡슐화하는 방법
나는 등 같은 거래 패턴을 사용하여 내 데이터베이스 모델의 DAO를 작성하려고 해요자바
와 방법에서이 패턴을 캡슐화하는 좋은 방법을 무엇Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
tx.setTimeout(5);
//doSomething(session);
tx.commit();
}catch(RuntimeException e){
try{
tx.rollback();
}catch(RuntimeException rbe){
log.error("Couldn’t roll back transaction", rbe);
}
throw e;
}finally{
if(session!=null){
session.close();
}
}
//doSomething(session);
을 트랜잭션의 일부로 수행 할 인수로 사용 하시겠습니까? 때로는 쿼리를 실행하고, 때로는 session.saveOrUpdate
등에서 작업합니다. 필자는 많은 DAO를 작성하고이 패턴의 코드 복제로 나를 괴롭 히고 있습니다.
편집
session
운영 및 HQL (saveOrUpdate
, delete
는, 등) 그래서이 방법으로 전달해야 모든 그냥 쿼리입니다 사이에 직접 매핑이 있습니까?
통찰력에 감사드립니다.
는
감사를 실행하고자하는 쿼리의 설정 . 그것에 대해 생각한 후에'session.merge()','session.get()'등과 같은 세션 객체를 사용하여 수행되는 특정 액션이 있습니다. 이러한 함수와 쿼리를 효과적으로 매핑 할 수 있습니까? 이렇게하면 세션 종속성에서 모든 쿼리를 완전히 추출 할 수 있습니다. – Luke
@ 루크 언제든지'execute' 시그니처를'execute (Session session, Transaction tx)'로 변경하고 "쿼리"가 세션 객체의 메소드를 실행하도록 할 수 있습니다. 트랜잭션과 세션 부분을 분리하여 보관하려면'execute (Transaction tx)'메소드와'MySessionState' 클래스와'execute (Session session)'메소드를 가진'MyQuery' 클래스를 사용하십시오 –
고마워요! 나는 약간의 수정을했고, 나는 그것을 작동시켰다. C#과 같은 Task가 있었으면 좋겠다. – Luke