我对Springs DB-Transaction处理有一种奇怪的行为我无法绕过我的脑袋。
给出以下代码:
@Transactional
public void saveDocumentToDB() {
dbService.addNewEntity('123', 'helloWorld');
DbEntity dbEntity = dbService.getEntityByID('someId');
throw new RuntimeException();
}
其中dbService
是某个@Service
- 可以访问JPA的类 - CrudRepository
。
我的问题:getEntityByID
- 方法又调用自动生成的存储库对象上的方法提交事务,从而将第一个“添加”调用写入数据库。
如果没有此调用,事务就会很好地回滚......
您是否有任何建议如何使自动生成的CRUD-方法也尊重交易?
答案 0 :(得分:0)
在我的application.properties中,我使用了
.col2
导致Hibernate使用MyISAM-Engine生成其表,该表不支持事务(和外键)。
我把它改成了
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
并重建了db-schema。
我发现它非常不直观,所谓的默认" MySQL5Dialect"不使用默认引擎但是使用MyISAM。
将来可能对某人有帮助。