有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql如何用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(saveOrUpdatedelete等)之间是否有直接映射,所以我只需要传递一个查询就可以了

谢谢你的见解


共 (1) 个答案

  1. # 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子类