Webアプリに次の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つの質問があります
- これはこのようなバグが原因ですか?
- 2つの回避策があると思います-他に何かありますか?
2.1最初の回避策-を使用する
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
repository.save(myObject);
}
});
2.22番目の回避策
ヘルパークラスを作成し、代わりにそれに注釈を付けます。
2.3(考えられる3番目の回避策は、内部クラスのメソッドに@Transactionalアノテーションを付けることです。これは2.2と非常によく似ています)。