Java Persistence Query Language 위에 JPA criteria 빌더를 사용하는 이점을 알고 있습니다.JPA 기준 빌더 - 사람이 읽을 수있는 언어로
이러한 종류의 쿼리를 작성하는 방법을 쉽게 설명 할 수 있습니까? 내 검색어를 작성하는 데 사람이 읽을 수있는 설명이 필요합니다. 내 데이터베이스를 쿼리하는 직관적 인 접근 방법이 있습니다..
예 :
SQL : 메타 모델에
SELECT id,status,created_at from transactions where status='1'
and currency='USD' and appId='123' order by id
Critera 빌더 :
Map<SingularAttribute<Transaction, ?>, Object> params = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();
Root<Transaction> r = cq.from(Transaction.class);
Predicate p= cb.conjunction();
for (Map.Entry<SingularAttribute<Transaction, ?>, Object> param: params.entrySet())
p = cb.and(p, cb.equal(r.get(param.getKey()), param.getValue()));
cq.multiselect(r.get(Transaction_.id), r.get(Transaction_.status),
r.get(Transaction_.created_at))
.where(p)
.orderBy(cb.asc(r.get(Transaction_.id)));
List<Tuple> result = em.createQuery(cq).getResultList();
이 예제는 또 다른 질문을 기반으로했습니다 : Complex queries with JPA criteria builder
직관적 인 것은 분명히 기준 API의 설계 목표 중 하나가 아니 었습니다. IMHO 이점은 JPQL의 가독성과 동적 구조의 손실보다 중요하지 않습니다. – kostja
그리고 가독성과 튜토리얼의 요구 사항은 무엇입니까? IMHO [JPA 2.0의 동적, typesafe 쿼리] (http://www.ibm.com/developerworks/library/j-typesafejpa/) 체크 아웃 할 수 있습니다. – perissf
이 질문은 주제가 아니므로 닫으려고합니다. 프로그래밍에 대한 문제가 아니라 이미 작동중인 코드 개선에 관한 것입니다. – TylerH