我的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
我有两个问题
2.1首先解决方法 - 使用
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
repository.save(myObject);
}
});
2.2第二种解决方法
创建一个帮助器类并注释它。
2.3(可能的第三种解决方法是在内部类的方法上注释@Transactional这与2.2非常相似)。
答案 0 :(得分:2)
使用Spring注释时(我知道@Transactional
是Sun标准 - 但是你需要一个实现) - Spring使用AOP来注释类以添加事务处理代码。这仅适用于Spring bean。如果您的类是JSF的支持bean - Mojarra框架不会将自己的事务处理代码插入此注释。
简短回答 - @Transactional
适用于Spring加载的bean。否则,您需要找到支持它的框架或假设它不起作用。