Java 条件查询链接是一种良好的做法吗?

Java 条件查询链接是一种良好的做法吗?,java,hibernate,jpa,orm,java-ee-6,Java,Hibernate,Jpa,Orm,Java Ee 6,我是基于JavaEE项目的链接条件查询,但我不确定这是否是一个好的实践 它有许多优点,比如减少了代码,更重要的是,初始查询可以重用。但我不知道它的缺点是什么 请看一次,并建议我是否在正确的轨道上。它在我的项目中工作得非常好 public abstract class AbstractFacade<T> { private Class<T> entityClass; protected CriteriaQuery<T> criteriaQuer

我是基于JavaEE项目的链接条件查询,但我不确定这是否是一个好的实践

它有许多优点,比如减少了代码,更重要的是,初始查询可以重用。但我不知道它的缺点是什么

请看一次,并建议我是否在正确的轨道上。它在我的项目中工作得非常好

public abstract class AbstractFacade<T> {

    private Class<T> entityClass;
    protected CriteriaQuery<T> criteriaQuery;
    protected CriteriaBuilder criteriaBuilder;
    protected Root<T> from;
    protected List<Predicate> predicates;

    @PostConstruct
protected void _startQuery() {
    this.criteriaBuilder = getEntityManager().getCriteriaBuilder();
    this.criteriaQuery = this.criteriaBuilder.createQuery(entityClass);
    from = this.criteriaQuery.from(entityClass);
    predicates = new ArrayList<Predicate>();
}

我使用的是JPA2.0、Hibernate和GlassFish。

如果它不正常,API将不允许它。由于
javax.persistence.criteria
包中充满了这种模式,因此它很可能是有意的。

实际上,我对它的效率和可靠性表示怀疑。感谢您的建议。现在,我也有了类似的理解。
}


public abstract class AbstractUserLoggableFacade<T extends AbstractUserLoggable> extends AbstractFacade<T> {

   .................
}


public abstract class OrganizationTrackableFacade<T extends OrganizationalTrackable> extends AbstractUserLoggableFacade<T> {


........................
}
 @Stateless
    public class DayStartFacade extends OrganizationTrackableFacade<DayStart> {

       @TransactionAttribute(TransactionAttributeType.NEVER)
        private DayStartFacade filterByEnded(Boolean b) {
            this.predicates.add(criteriaBuilder.equal(from.get(DayStart_.isEnded), b));
            return this;
        }

         @TransactionAttribute(TransactionAttributeType.NEVER)
        private DayStartFacade filterByOrganization(Organization o) {
            this.predicates.add(criteriaBuilder.equal(from.get(OrganizationalTrackable_.organizationId), o));
            return this;
        }
 public DayStart getCurrentDayStart() {
        DayStart d = null;
        try {
            d = ((DayStartFacade) this.startQuery()).filterByEnded(Boolean.FALSE).filterByOrganization(userBean.getCurrentOrganization()).getSingleResult();
        } catch (javax.persistence.NonUniqueResultException e) {
            System.out.println("No unique restult exception at getCurrentDayStart");
            e.printStackTrace();
        } catch (javax.persistence.NoResultException nre) {
           e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return d;
    }
}