在TransactionTemplate内部调用@Transactional方法

时间:2014-06-23 15:35:15

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

我的应用程序中有一项复杂的任务,可以大量使用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,问题仍然存在。有趣...

0 个答案:

没有答案