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