我对Springs DB有一种奇怪的行为--事务处理,我无法理解。
给定以下代码:
@Transactional
public void saveDocumentToDB() {
dbService.addNewEntity('123', 'helloWorld');
DbEntity dbEntity = dbService.getEntityByID('someId');
throw new RuntimeException();
}其中dbService是一些可以访问JPA-CrudRepository的@Service-class。
我的问题是:getEntityByID-Method反过来调用自动生成的存储库对象上的方法,提交事务,从而将第一个“添加”调用写入数据库。
如果没有这个调用,事务将很好地回滚...
你有什么建议如何让自动生成的CRUD方法也尊重事务吗?
发布于 2017-11-16 00:36:42
在我的application.properties中,我使用了
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
这导致Hibernate使用MyISAM-Engine生成表,而MyISAM-Engine不支持事务(和外键)。
我把它改成
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect并重建db模式。
我发现这很不直观,所谓的默认"MySQL5Dialect“使用的不是默认引擎,而是MyISAM。
也许它能在未来帮助到某个人。
https://stackoverflow.com/questions/47291350
复制相似问题