我正在尝试使用事务模式为我的数据库模型编写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
等)之间的直接映射,所以我需要传递到这个方法只是一个查询?
像这样的东西可能是你想要的
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
子类