如何在Java中封装事务模式

时间:2013-06-08 23:18:36

标签: java mysql database hibernate transactions

我正在尝试使用像这样的事务模式为我的数据库模型编写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(saveOrUpdatedelete等)之间是否存在直接映射,因此我需要传递给此方法只是一个查询?

感谢您的见解。

1 个答案:

答案 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子类