SeamはEntityQueryのvalidateフェーズでセッションを開始し、FlushModeType.MANUALパラメータが無効な問題の解決

1585 ワード

問題のように、私の解決方法を直接見てください.
@Override
@Begin(join = true)
public void validate() {
super.validate();
((Session) getEntityManager().getDelegate()).setFlushMode(FlushMode.MANUAL);
}

 
delegateによるトランザクションのコミットモードの設定
なぜ@Begin(flushMode=FlushModeType.MANUAL,join=true)のように設定しないのか疑問に思う人もいますが、Seamのコンテキスト環境は存在しますが、FlushModeType.MANUALパラメータが無効です.具体的な原因はまだ分かりません.
 
Seam公式ドキュメント:Seamでは、セッションの開始時にFlushModeTypeを指定できます.MANUALパラメータ.現在、Hibernateは永続化の最下位プロバイダとして機能していますが、他の同類のコンピュータメーカーの拡張をサポートする計画です.
validateメソッドは、コンポーネントが作成されたときに実行されます.
しかし、EntityQueryのvalidateフェーズではセッションを開始することができるが、なぜFlushModeTypeを指定するのか.MANUALパラメータはありますが、無効ですか?
 
注:ここのEntityQueryはorgです.jboss.seam.framework.EntityQuery<E>,validate実装ソースコード
 
   @Override
   public void validate()
   {
      super.validate();
      if ( getEntityManager()==null )
      {
         throw new IllegalStateException("entityManager is null");
      }
      
      if (!PersistenceProvider.instance().supportsFeature(Feature.WILDCARD_AS_COUNT_QUERY_SUBJECT)) {
         setUseWildcardAsCountQuerySubject(false);
      }
   }

  
 
   @Create
   public void validate()
   {
      if ( getEjbql()==null )
      {
         throw new IllegalStateException("ejbql is null");
      }
   }