Seam在EntityQuery的validate阶段开始会话,FlushModeType.MANUAL参数无效问题的解决

如题所说,直接看我的解决方法

@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");
      }
   }

 

你可能感兴趣的:(Seam在EntityQuery的validate阶段开始会话,FlushModeType.MANUAL参数无效问题的解决)