如何在Java中封装事务模式



我正在尝试使用事务模式为我的数据库模型编写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子类

最新更新