Spring,Hibernate,MySQL - 交易如何运作 - 结论/问题**

时间:2011-05-11 12:42:31

标签: mysql hibernate spring transactions

2 个答案:

答案 0 :(得分:5)

这是我的看法:

  1. 最终,提交/回滚行为是在关系数据库中完成的,但是对数据库负全部责任并不完全准确。当您使用Spring,JDBC和关系数据库时,会涉及一个中间层,通常称为事务管理器。
  2. Hibernate以编程方式在对象中实现事务逻辑。
  3. Hibernate会以编程方式标记事务的开始和结束。
  4. Hibernate可能想知道事务是否被回滚;更重要的是,您的应用程序需要知道它才能告诉用户。
  5. Hibernate == programmatic; Spring ==声明。
  6. 可以由开发人员编写。如果需要,您甚至可以在JDBC中执行所有操作。但是,声明性交易有很好的理由。 (你听起来像是在试图证明不使用它们。我想知道为什么?)
  7. 不明白这一点 - 改写它。
  8. 交易经理负责交易。
  9. Spring会抛出相应的例外,是的。
  10. 你似乎一遍又一遍地重复同样的问题。
  11. 你的真正意义在这里?我很想知道。

    您始终可以在JDBC中以编程方式执行此操作。最终,所有使用JDBC与关系数据库交互的Java解决方案都会使用,包括Hibernate和Spring。这是一个模板:

    // prototypical write operation
    public void update(Connection connection) throws SQLException
    {
        connection.setAutoCommit(false);
        try
        {
            // SQL logic here
            connection.commit();  // if you get here, success
        } 
        catch (SQLException e)
        {
            try { if (connection != null) connection.rollback(); } catch (SQLException e) {}
            // might do some other things here (logging, etc.)
            // sql error codes will tell you why; spring translates these for you.
        }
        finally
        {
            // close statements here in individual try/catch blocks.
        }
    }
    

答案 1 :(得分:1)

  1. 是的,你告诉Hibernate事务开始/结束的位置,它告诉DBMS
  2. 你是对的,Hibernate不需要知道如何在DBMS中实现事务
  3. 对,Spring只是触发它
  4. 根据您的问题,我猜您已阅读transactions in Spring docs 我建议你也阅读这个IBM developerWorks article on transactions