JPA - JPQL 서브쿼리 (객체지향 쿼리 언어)
JPA - JPQL 서브쿼리 (객체지향 쿼리 언어),컬렉션 식
JPQL도 서브 쿼리를 지원하지만 몇 가지 제약사항이 존재한다.
-WHERE, HAVING 절에서만 사용할 수 있고, SELECT,FROM절에서는 사용할 수 없다.
/*
* 서브쿼리 - 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=================");
}
서브쿼리함수
/*
* 서브쿼리 함수
* [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=================");
}
컬렉션식
/*
* 연관관계 컬렉션에 사용할 수 있는 수식? 컬렉션 식이다.
* 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=================");
}
출처: https://coding-start.tistory.com/88?category=781616 [코딩스타트]
'Spring Data > Spring Data JPA' 카테고리의 다른 글
JPA - JPAQuery와 Q클래스 (0) | 2021.04.17 |
---|---|
JPA - NativeQuery ( SQL ) 네이티브 SQL 사용하기! (0) | 2021.04.17 |
JPA - Criteria Query(객체지향 쿼리 빌더), JPQL Query Builder Class (0) | 2021.04.17 |
JPA - @NamedQuery , 정적 쿼리 (0) | 2021.04.17 |
JPA - JPQL 조인(객체지향쿼리),Java Persistence Query Language (0) | 2021.04.17 |
JPA - JPQL(객체지향쿼리),Java Persistence Query Language (0) | 2021.04.17 |
JPA - @Embedded,@Embeddable 임베디드타입 (0) | 2021.04.17 |
JPA - 영속성 전이(Cascade)와 고아 객체(Orphan) (0) | 2021.04.17 |