【问题标题】:Spring data jpa deleteAllByField not working春季数据 jpa deleteAllByField 不起作用
【发布时间】:2022-01-12 17:03:33
【问题描述】:

我想知道为什么 deleteAllByField 不起作用。此方法在@Transactional 服务层中调用。通过使用 jpa 记录 hql 查询,不会记录任何内容。 这是存储库和服务的样子:

@Repository
public interface FooRepository extends JpaRepository<Foo,Long> {
    void deleteAllByField(String field)
}

@Service
@Transactional
public FooService {
    @Autowired
    FooRepository fooRep;

    public void deleteAllByField(String field) {
        fooRep.deleteAllByField(field);
    }
}

使用内置 deleteAll() 时,记录被删除,我可以看到打印的 hql 查询。

我在存储库的方法级别添加了@Transactional,它起作用了。

我很困惑。有人可以澄清这种行为吗?

【问题讨论】:

  • 请添加您的代码,否则将很难回答这个问题。谢谢!
  • 如果您正在寻找解决方法,您可以使用 @Query atModifying atQuery("delete from Fruit f where f.name=:name or f.color=:color")
  • @JoãoDias 感谢您的回复。我添加了一些代码 sn-ps :)
  • 即使在deleteAllByField 方法中没有@Transactional,您的代码也应该可以工作。您能否尝试删除它,但将 Long 作为此类方法的返回类型:Long deleteAllByField(String field);?谢谢。
  • 嗨@joão,经过调查,我注意到我创建了一个客户事务管理器。在服务层上添加 @Transactional(''customTransactionManager'') 后,它就起作用了。

标签: spring hibernate spring-data-jpa


【解决方案1】:

经过调查,我注意到我创建了一个客户事务管理器。在服务层上添加 @Transactional(''customTransactionManager'') 后,它就起作用了。

Ps:我有一个多数据源配置。

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2015-02-27
    • 2017-12-17
    • 2013-11-12
    • 2020-02-20
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多