我正在尝试使用像这样的事务模式为我的数据库模型编写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
等)之间是否存在直接映射,因此我需要传递给此方法只是一个查询?
感谢您的见解。
答案 0 :(得分:1)
这样的事情可能就是你所追求的
public void doSomething(MyQuery myQuery) {
...
Transaction tx = null;
try {
...
myQuery.execute(tx);
...
} catch (...) {
} finally {
}
}
public class MyQuery {
public void execute(Transaction tx) {
// run queries on transaction
}
}
为要执行的每个查询或一组查询创建新的MyQuery
实例或新的MyQuery
子类