【发布时间】: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