@ManagedBean和@Transactional - 错误的春天? 解决方法?(@Man

2019-10-29 10:20发布

我有以下JSF支持bean在我的webapp

@ManagedBean
class MyBackingBean implements Serializable {

    private MyHibernateRepository repository;
    ...

    @Transactional 
    public void save() {
        ....
        repository.save(myObject);
    }

}

当它到达repository.save方法调用-我得到以下错误

no transaction is in progress

我有两个问题

  1. 这是因为一个错误的这样 ?
  2. 我认为有两种解决方法 - 是否有任何其他人呢?

2.1第一个解决方法 - 使用

transactionTemplate.execute(new TransactionCallbackWithoutResult() {
  protected void doInTransactionWithoutResult(TransactionStatus status) {
    repository.save(myObject);
  }
});

2.2第二个解决方法

创建一个辅助类和标注该网址。

2.3(A可能的第三解决方法是注释@Transactional在内类的方法这是很相似到2.2)。

Answer 1:

当使用Spring注解(我知道@Transactional是Sun标准-但你需要一个实现) - Spring使用AOP注解的类添加处理代码交易。 这仅适用于Spring bean的。 如果你的类是支持Bean JSF - 在钻嘴鱼科框架将不插入它自己的事务处理代码为此注释。

简短的回答- @Transactional作品由弹簧加载豆。 否则,你需要找到一个支持它的框架或承担它不会工作。



文章来源: @ManagedBean and @Transactional - bug in Spring? Workarounds?