【问题标题】:Spring Programmatic Transaction ManagementSpring 程序化事务管理
【发布时间】:2015-08-13 05:32:54
【问题描述】:

我是 Spring 事务管理的新手,我想知道我删除了 TransactionStatus status = transactionManager.getTransaction(def);和 transactionManager.commit(status);记录还会保存到数据库中吗?

TransactionStatus status = transactionManager.getTransaction(def);

  try {
     String SQL1 = "insert into Student (name, age) values (?, ?)";
     jdbcTemplateObject.update( SQL1, name, age);

     // Get the latest student id to be used in Marks table
     String SQL2 = "select max(id) from Student";
     int sid = jdbcTemplateObject.queryForInt( SQL2 );

     String SQL3 = "insert into Marks(sid, marks, year) " + 
                   "values (?, ?, ?)";
     jdbcTemplateObject.update( SQL3, sid, marks, year);

     System.out.println("Created Name = " + name + ", Age = " + age);
     transactionManager.commit(status);

【问题讨论】:

  • 试试吧,你会看到的。为什么不使用 TransactionTemplate,如记录的那样? docs.spring.io/spring/docs/current/spring-framework-reference/…
  • 我尝试删除它,它仍然有效(数据保存到数据库中),只是想确认删除此提交是否安全(在这种情况下我不需要回滚或事务)
  • 不安全...要么一切正常,要么一切都失败了。如果您删除托管的 tx,则第一个插入可能会正常,而第二个插入可能会失败,而您无法回滚第一个。

标签: spring spring-jdbc


【解决方案1】:

始终建议您将数据库保持在一致状态,并且您的事务应该是原子的。删除事务管理可能会违反该原则。
或者,您可以使用 @Transactional 注释,它可以为您节省大量样板代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多