1
我是基於Java EE項目的鏈接標準查詢,但我不確定這是否是一種好的做法。是鏈接的標準查詢一個良好的做法?
有許多優點,如減少代碼,更重要的是可以重用初始查詢。但我不知道它的缺點是什麼。
請看一次,並建議我是否在正確的軌道上。它在我的項目中表現出色。
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>();
}
.......................... .............. ............
}
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;
}
}
我正在使用JPA 2.0,Hibernate和GlassFish。
其實,我是懷疑它的效率和可靠性。謝謝你的建議。現在,我也有類似的理解。 – Rajesh