質問

私は私の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つの質問があります

  1. これはバグのためです このような?
  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 春に積み込まれた豆のために働いています。それ以外の場合は、それをサポートするフレームワークを見つけるか、機能しないと仮定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top