@ManagedBean和@Transactional - Spring中的错误?解决方法?

时间:2012-01-15 10:44:32

标签: spring jsf-2 managed-bean transactional spring-transactions

我的Webapp

中有以下JSF支持bean
@ManagedBean
class MyBackingBean implements Serializable {

    private MyHibernateRepository repository;
    ...

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

}

当它进入repository.save方法调用时 - 我收到以下错误

no transaction is in progress

我有两个问题

  1. 这是因为一个错误like this吗?
  2. 我相信有两种解决方法 - 还有其他吗?
  3. 2.1首先解决方法 - 使用

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

    2.2第二种解决方法

    创建一个帮助器类并注释它。

    2.3(可能的第三种解决方法是在内部类的方法上注释@Transactional这与2.2非常相似)。

1 个答案:

答案 0 :(得分:2)

使用Spring注释时(我知道@Transactional是Sun标准 - 但是你需要一个实现) - Spring使用AOP来注释类以添加事务处理代码。这仅适用于Spring bean。如果您的类是JSF的支持bean - Mojarra框架不会将自己的事务处理代码插入此注释。

简短回答 - @Transactional适用于Spring加载的bean。否则,您需要找到支持它的框架或假设它不起作用。