【问题标题】:Hibernate delete and insert in one transactionHibernate 在一个事务中删除和插入
【发布时间】:2020-08-12 09:32:10
【问题描述】:

这是我的 JPA 存储库:

interface ClientApplicationPriorityRepository : JpaRepository<ClientApplicationPriority, Long> {

    fun deleteAllByClientId(clientId: String): Int
}

这是我需要先删除后插入的方法(优先级很重要):

@Transactional
    public void saveClientApplicationPriorities(String clientId, Boolean isFoldersPresented, List<ClientApplicationPriority> clientApplicationPriorities) {
        clientApplicationPriorityRepo.deleteAllByClientId(clientId);
        clientApplicationPriorityRepo.flush();
        if (isFoldersPresented) {
            clientApplicationPriorityRepo.saveAll(clientApplicationPriorities);
        }
    }

我必须在事务中执行此操作,但是在测试中的方法之后,我发现数据库中没有删除任何内容。什么问题以及如何解决?

【问题讨论】:

    标签: java hibernate kotlin jpa transactions


    【解决方案1】:

    您可能需要使用以下内容注释您的 deleteAllByClientId() 函数:

        @Modifying
        @Transactional
    
    

    【讨论】:

    • 我是这么想的,但没用
    • 请注意,@Transactional 在内部通过创建代理来工作,因此您必须从另一个组件调用该公共方法,否则您将绕过代理并且不会创建事务。你怎么打电话给saveClientApplicationPriorities
    • 正是@user2340612 所说的。这个概念称为自调用,在 Spring AOP 中不受支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2016-04-30
    • 2019-10-12
    • 2011-05-08
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多