如果有人可以解释此注释的作用以及确切的使用时间:
@Transactional(propagation=Propagation.REQUIRED)
谢谢
当传播设置为PROPAGATION_REQUIRED时,将为应用该设置的每种方法创建一个逻辑事务作用域。每个此类逻辑事务作用域可以单独确定仅回滚状态,而外部事务作用域在逻辑上与内部事务作用域无关。当然,在标准PROPAGATION_REQUIRED行为的情况下,所有这些范围都将映射到同一物理事务。因此,内部事务范围中设置的仅回滚标记确实会影响外部事务实际提交的机会(正如你期望的那样)。
考虑这段代码…
class Service { @Transactional(propagation=Propagation.REQUIRED) public void doSomething() { // access a database using a DAO } }
调用doSomething()时,它知道必须在执行之前在数据库上启动事务。如果此方法的调用者已经启动了事务,则此方法将在当前数据库连接上使用相同的物理事务。
此@Transactional注释提供了一种在执行代码时告诉你代码必须具有事务处理的方法。它不会一无所获,因此你可以在代码中做出这样的假设:数据库中不会留下不完整的数据,或者如果发生异常,则必须清理某些内容。
@Transactional
事务管理是一个相当复杂的主题,因此希望这个简化的答案会有所帮助