JPA - JPQL 서브쿼리 (객체지향 쿼리 언어)
2019. 2. 9. 14:49ㆍWeb/JPA
JPA - JPQL 서브쿼리 (객체지향 쿼리 언어),컬렉션 식
JPQL도 서브 쿼리를 지원하지만 몇 가지 제약사항이 존재한다.
-WHERE, HAVING 절에서만 사용할 수 있고, SELECT,FROM절에서는 사용할 수 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* * 서브쿼리 - SQL과 다르게 where,having 절에서만 사용가능하다. */ public void subQuery() { String jpql = "select m from MemberJPQL m where m.age > (select avg(m2.age) from MemberJPQL m2)"; TypedQuery<MemberJPQL> query = em.createQuery(jpql,MemberJPQL.class); List<MemberJPQL> teams = query.getResultList(); System.out.println("================subQuery================="); for(MemberJPQL m : teams) { System.out.println(m.toString()); } System.out.println("================subQuery================="); } | cs |
서브쿼리함수
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* * 서브쿼리 함수 * [NOT] EXISTS (subquery) - subquery에 결과가 존재하면 참이다. NOT은 반대 * {ALL | ANY | SOME } (subquery) - ALL 서브쿼리의 모든결과가 참이면 참, ANY 서브쿼리의 결과중 아무거나 참이면 참, SOME == ANY(반드시 비교연산자와 사용) * [NOT] IN (subquery) - 서브쿼리 결과 중 하나라도 같은 것이 있으면 참이다. * - 서브쿼리가 아닌 곳에서도 사용가능 ~ IN ('여성게1','여성게2') */ public void subQueryFunction() { String jpql = "select m from MemberJPQL m where m.age < ALL (select avg(m2.age)" +"from MemberJPQL m2)"; TypedQuery<MemberJPQL> query = em.createQuery(jpql,MemberJPQL.class); List<MemberJPQL> teams = query.getResultList(); System.out.println("================subQueryFunction================="); for(MemberJPQL m : teams) { System.out.println(m.toString()); } System.out.println("================subQueryFunction================="); } | cs |
컬렉션식
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* * 연관관계 컬렉션에 사용할 수 있는 수식? 컬렉션 식이다. * is [not] empty - 연관관계에 있는 컬렉션이 비어있는가? * {엔티티나 값} [not] member of {컬렉션 값 연관경로} - 엔티티나 값이 컬렉션에 포함되어있는가? */ public void collectionFunction() { /*String jpql = "select t from TeamJPQL t where t.members is not empty and t.name ='티스토리1'";*/ String jpql = "select t from TeamJPQL t where :memberParam member of t.members"; TypedQuery<MemberJPQL> query2 = em.createQuery("select m from MemberJPQL m where m.username='여성게1'",MemberJPQL.class); MemberJPQL member = query2.getResultList().get(0); TypedQuery<TeamJPQL> query = em.createQuery(jpql,TeamJPQL.class); query.setParameter("memberParam", member); List<TeamJPQL> teams = query.getResultList(); System.out.println("================collectionFunction================="); for(TeamJPQL m : teams) { System.out.println(m.toString()); } System.out.println("================collectionFunction================="); } | cs |
'Web > JPA' 카테고리의 다른 글
JPA - Criteria Query(객체지향 쿼리 빌더), JPQL Query Builder Class (0) | 2019.02.09 |
---|---|
JPA - @NamedQuery , 정적 쿼리 (0) | 2019.02.09 |
JPA - JPQL 조인(객체지향쿼리),Java Persistence Query Language (0) | 2019.02.09 |
JPA - JPQL(객체지향쿼리),Java Persistence Query Language (0) | 2019.02.09 |
JPA - @Embedded,@Embeddable 임베디드타입 (0) | 2019.02.04 |