여기에 설명 된대로 내가 명명 된 쿼리와 동적 쿼리를 다시 사용하려고 :JPA 2.1 /은 EclipseLink : 재사용 기준 쿼리로 명명 된 쿼리
https://wiki.eclipse.org/EclipseLink/Release/2.5/JPA21#Add_Named_Query 목표는 한 번만 기준 쿼리를 구축하는 것입니다
매개 변수가 변경되지 않으면 이름이 지정된 쿼리로 다시 사용하십시오.
public static List<User>getUserByParameter(ParameterMap parameter){
Query userByParameter = em.createNamedQuery("userByParameter");
if (null != userByParameter){
return userByParameter.getResultList();
}else {
//build the dynamic query as above
}
}
namedQuery이 처음이 존재하지 않기 때문에 이것은 nullpointer 결과 :
public static List<User>getUserByParameter(ParameterMap parameter){
EntityManager em = getEntityManager();
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> criteriaQuery = builder.createQuery(User.class);
Root<User> user = criteriaQuery.from(User.class);
List<Predicate> predicates = new ArrayList<Predicate>();
//...build up the query depending on parameter
if (null != parameter.getStatus()){
predicates.add(builder.equal(user.<Integer>get("status"), parameter.getStatus()));
}
//etc.
criteriaQuery.select(user).where(predicates.toArray(new Predicate[]{}));
Query query = em.createQuery(criteriaQuery);
//now register this query as a namedQuery
em.getEntityManagerFactory().addNamedQuery("userByParameter", query);
return query.getResultList();
}
내가 좋아하는 뭔가에 대해 생각했다.
어떻게 내가 namedquery가 존재하는 경우 (시도 - 캐치를 사용하지 않고) 깨끗한 방법으로 방법을 확인할 수 있습니다, 같은 방법으로 또는 다른 단어에서 쿼리를 다시 사용할 수 있습니다?
는 가능하지 않는 것 : ** "매개 변수 값이 유지되지 않습니다."** 그 (한 번 명명 된 쿼리로 정의된다) 같은 결과가 여기에 이해가되지 않습니다 각 사용자에 대해 반환되는 것을 의미 . – Steve