JPA-Repository读访问权限提交外部事务

时间:2017-11-14 17:00:58

标签: java spring hibernate transactions spring-data-jpa

我对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-方法也尊重交易?

1 个答案:

答案 0 :(得分:0)

在我的application.properties中,我使用了

.col2

导致Hibernate使用MyISAM-Engine生成其表,该表不支持事务(和外键)。

我把它改成了

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect

并重建了db-schema。

我发现它非常不直观,所谓的默认" MySQL5Dialect"不使用默认引擎但是使用MyISAM。

将来可能对某人有帮助。