StackTc
2018-06-24 08:43
采纳率: 61.9%
浏览 3.2k
已采纳

@Transactional这个注解麻烦解释下

这个注解的话应该是开启事务,按照我的理解是如果涉及到2个表的插入或者修改的话
才需要开启注解。
但是我看到公司的项目,service 里面只有插入一个表的数据也用了这个注解,是否是多余的。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

11条回答 默认 最新

  • xxfamly 2018-06-25 06:03
    已采纳

    从业务上来说,一次交互产生的数据保持同一性,否则从业务层面认为这就是脏数据,但是数据库认为这是合理的。为了保证数据的有效,需要功能入口统一管理事务,不仅仅限于是几个表的操作,可能是多个SQL的操作。
    从设计上来说,为了规范代码写法,可能要去入口service全部加入事务控制,便于后续扩展。

    打赏 评论
  • 汪旃 2018-06-24 08:53

    这个不是多余的,你的理解是错误的,业务层(service)主要是实现业务的,在业务层中无论是对一张表或者是多张表,都需要开启事物注解的。

    打赏 评论
  • 寂寞的潇洒 2018-06-24 10:39

    这个注解的意思是,spring容器来自动管理,这个service中的每个方法的插入、修改、删除等业务的事务,不然的话,每个插入修改删除,都需要手动提交或回滚。

    打赏 评论
  • csk124 2018-06-24 10:49

    一个service方法可能调用多个dao的方法,这些dao方法中的多个sql就需要一起提交或者回滚,事务是对sql来说的,不是对表来说的

    打赏 评论
  • zhahuan007 2018-06-24 13:10

    使用注解式事物,方法上面不加这个注解,代码不会自动提交。

    打赏 评论
  • xiaobiaobiao 2018-06-24 13:51

    事务的隔离级别,有2种表达方式

    打赏 评论
  • 小艾888 2018-06-24 19:46

    TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
    TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别。
    TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
    TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。
    TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

    打赏 评论
  • swiftgod 2018-06-25 02:07

    加入这个注解的意思是,这个方法将使用事务,且这个注解应该只被应用到 public 可见度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错, 但是这个被注解的方法将不会展示已配置的事务设置。

    打赏 评论
  • hot2dog 2018-06-25 02:13

    对,,一个业务方法里面, 多次调用 一张表的不同方法, 也有可能引发事务,

    兄弟,你要理解, 事务是加在 service 层,业务方法上的, 不对针对 dao层某个操作数据的单独方法。。。

    打赏 评论
  • Noopla 2018-06-25 02:15

    打了这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,不知道这样说你能不能理解,即是方法里面对数据库操作,如果失败则spring负责回滚操作,成功提交操作

    打赏 评论
  • w_m_5 2018-06-25 02:45

    在类或方法中使用@transaction注解 应用事务

    打赏 评论

相关推荐 更多相似问题