@managedbean and @Transactional-春のバグ?回避策?
-
28-10-2019 - |
質問
私は私のwebappに次のJSFバッキングビーンを持っていました
@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.2秒の回避策
ヘルパークラスを作成し、代わりに注釈を付けます。
2.3(可能性のある3回目の回避策は、内側のクラスの方法で@Transactionalに注釈を付けることです。これは2.2と非常に似ています)。
解決
Spring Annotationsを使用する場合(私はそれを知っています @Transactional
Sun Standardですが、実装が必要です)-SpringはAOPを使用してクラスに注釈を付け、トランザクション処理コードを追加します。これはスプリングビーンズでのみ機能します。クラスがJSFのバッキングビーンである場合、Mojarraフレームワークはこの注釈に独自のトランザクション処理コードを挿入しません。
簡潔な答え - @Transactional
春に積み込まれた豆のために働いています。それ以外の場合は、それをサポートするフレームワークを見つけるか、機能しないと仮定する必要があります。
所属していません StackOverflow