【问题标题】:Is it possible to mark one method of an entire @Transactional class as non-transactional是否可以将整个 @Transactional 类的一种方法标记为非事务性的
【发布时间】:2011-10-25 14:23:07
【问题描述】:

我需要在标记为@Transactional 的类的方法中手动维护事务。如果我现在尝试这样做,则会引发异常(很可能是因为事务被提交了两次,一次由我提交,两次由包装代理提交)。我需要做什么。

如果这是不可能的,那么有没有办法在事务成功提交时得到通知(数据库中的数据和所有内容),以便我调用另一个依赖于同一个数据库的应用程序?

【问题讨论】:

    标签: java database hibernate transactions


    【解决方案1】:

    我希望你正在使用 spring。如果是,那么你可以。

    从 API here 读取此代码块。在 10.5.6 使用 @Transactional

    部分
    @Transactional(readOnly = true)
    public class DefaultFooService implements FooService {
    
     public Foo getFoo(String fooName) {
    // do something
    }
    
    // these settings have precedence for this method
    @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
    public void updateFoo(Foo foo) {
     // do something
    }
    }
    

    【讨论】:

    • 在标有propagation = Propagation.REQUIRES_NEW 的方法中,是否允许我手动开始/提交事务?我试过了,但我仍然得到同样的异常
    • 不要添加任何代码来开始,提交或回滚你自己,春天会为你做的。在上面的示例中,将在最后一行提交的 updateFoo() 方法的开头启动一个新事务。如果中间有任何问题,事务将被回滚。
    【解决方案2】:

    不,我不相信这是可能的。我相信如果你创建另一个线程并执行代码,它会在事务之外。请注意这一点,因为当您创建其他线程并自行管理时,它可能会变得很冒险。

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2010-10-22
      • 2023-03-20
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多