我的应用程序中有一项复杂的任务,可以大量使用transactionTemplate。我这样做时只有一个问题:
transactionTemplate.execute(status -> {
component1.method1();
.....
//COMMIT OF THE TRANSACTION
}
其中component1是这样的:
@Component
public class Component1{
public boolean method1(){
component2.method2();
....
....
其中component2是这样的:
@Transactional
public interface Component2 extends JpaRepository<Impostazione, Long>
@Query(value = "FROM Settings WHERE key=?")
@Transactional(readOnly = true)
public Impostazione method2(String key);
一切正常,但在持久化的bean上添加它:
@PreUpdate
@PrePersist
private void printLog(){
log.debug("*******UPDATE/PERSIST**********");
我看到Hibernate(我正在使用它)更新/持久化实体在我从transactionTemplate的代码出来之前,所以在提交事务之前。
现在,我非常确定从我的方法中删除@Trasactional注释都应该可行,但是我不能这样做,因为我正在重用我在我的应用程序的其他部分使用的服务。 我认为不明智地复制代码并使用@Transactional服务并且没有它的服务具有相同的实现。
希望得到启发性回应。谢谢!
- - - - EDIT --------- 最后还从Component2中删除了@Transactional,问题仍然存在。有趣...