JavaDoc读取
配置是否为Spring Data JPA存储库启用默认事务。默认为true。如果禁用,则必须在配置事务的Facade后面使用存储库(例如,使用Spring的注释驱动的事务工具),或者必须使用存储库方法来划分事务。
我调试到框架中,如果不存在,它就会创建一个事务,即使使用enableDefaultTransactions = false。
据我所知,Spring Data JPA存储库预先配置了@Transactional(readOnly = true)(参见SimpleJpaRepository),这导致没有人注意到程序员何时忘记正确注释他的服务或工作正确@Transactional,因为Spring Data JPA为每个被调用的存储库方法创建一个事务。
我想禁用它。首先尝试在我的存储库超级界面上放置一个@Transactional(MANDATORY)。那不行。
然后我注意到@EnableJpaRepositories注释中的“enableDefaultTransactions”。我把它设置为假,但没有改变。 JavaDoc让我相信它会完全符合我的要求:删除默认事务支持并在使用存储库时抛出异常,而不是在事务上下文中。
我错了吗?这是一个错误吗? enableDefaultTransactions是否有其他方式?
使用spring data jpa 1.9.0.RELEASE。
答案 0 :(得分:0)
enableDataTransactions = false的意图是从实现中删除默认事务管理(我想从SimpleJpaRepository中删除)。它的行为就像没有指定@Transactional一样。然后,您可以控制服务层中的事务。
https://jira.spring.io/browse/DATAJPA-685
但是,无论enableDataTransactions参数如何,如果您在存储库接口中添加自己的@Transactional注释,它将被正确应用。
然而,然而!如果在类型级别指定@Transactional,则Spring框架本身(与数据和JPA项目无关)将仅将其应用于在该类型中声明的方法,而不应用于继承的方法。我发现这种行为是正确的!只有覆盖方法,才能更改其规范和实现。
{{1}}
在此示例中,MANDATORY传播将适用于findOne,但它不会找到所有。
注意:即使我发现这种行为是正确的,我仍然不喜欢没有标准的方法来全局配置MANDATORY传播。在我看来,它甚至应该是默认的。
以前的版本中存在此错误。我使用Spring 4.2.2和Sprint Data 1.11.0来测试它。
错误报告: