본문 바로가기

Join5

JPA - 객체지향 쿼리 언어 - QueryDSL Join, 서브쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Join QueryDSL 에서 Join 은 innerJoin, leftJoin, rightJoin, fullJoin 을 지원한다. 또한 JPQL 의 on 과 fetch 기능도 사용가능하다. join 을 사용할때에는 1번째 파라미터에 조인 대상을, 2번째 파라미터에 alias 를 지정한다. 귀찮지만 Join 예제를 실행해보기 위해 Member 엔티티와 Order 엔티티가 맵핑된 데이터를 만들어주자. Member member1 = new Member(); member1.setName("Name#1"); member1.setAge(10); member1.setAddress( new Address("City#1", "Street#1", "Zipcode#1"));.. 2021. 8. 18.
JPA - 객체지향 쿼리 언어 - Criteria 서브 쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 서브 쿼리 Criteria 로도 서브쿼리를 작성할 수 있다. 메인의 테이블과 연관된 서브쿼리와 메인의 테이블이 연관되지 않은 간단한 서브쿼리를 알아보도록 한다. - 간단한 서브쿼리 메인 테이블과 아무런 연관이 없는 간단한 서브쿼리부터 알아보도록 하자. 평균나이보다 나이가 많은 Member 엔티티만 조회해보자. JPQL 로 표현하면 "select m from Member m where m.age >= (select AVG(m2.age) from Member m2)" 과 같이 될 것이다. 데이터는 앞의 글에서 사용했던 아래 데이터를 이용한다. Member member1 = new Member(); member1.setName("Name#1"); member1.. 2021. 8. 11.
JPA - 객체지향 쿼리 언어 - JPQL 경로 표현식 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 경로 표현식 경로 표현식이라는것은 쉽게 얘기해 . 을 찍어 객체 그래프를 탐색하는것을 말한다. String jpql = "select m.name, o, a " + "from Member m " + "inner join m.orders o " + "inner join m.address a " + "where m.name = :username"; List members = em.createQuery(jpql) .setParameter("username", "User#1") .getResultList(); 위와 같은 JPQL 이 있다고 할 때 m.name, m.orders, m.address 모두 경로표현식을 이용한 것이라고 말할 수 있다. 경로 표현식은 종.. 2021. 8. 2.
JPA - 객체지향 쿼리 언어 - JPQL Fetch Join - 참조: 자바 ORM 표준 JPA 프로그래밍 - 페치 조인(Fetch Join) 페치 조인은 SQL 에서 이야기하는 조인의 종류를 말하는것은 아니다. 이전에 지연 로딩에 대해서 알아본적이 있는지 지연 로딩과 관련된 얘기이며 성능 최적화를 위해 제공하는 기능이다. 문법이 크게 어렵지는 않다. [ INNER | LEFT [OUTER] ] JOIN FETCH 와 같이 기존 Join 문법 뒤에 FETCH 를 붙여주기만 하면 된다. - 엔티티 페치 조인 앞에서 User#1 과 주문 2 건을 사용하던 예제를 계속 사용해보자. Order 에서 Member 엔티티 @ManyToOne 맵핑시 FetchType 은 Lazy 라고 가정한다. 이전에 INNER JOIN 을 이용하여 Order 와 Member 엔티티를 Joi.. 2021. 7. 31.
JPA - 객체지향 쿼리 언어 - JPQL Join - 참조: 자바 ORM 표준 JPA 프로그래밍 - 내부 조인(INNER JOIN) JPQL 조인은 SQL 조인과 기능은 같지만 문법이 약간 다르다. Join 예제를 실행해보기 위해 실전예제에서 사용한 1 : N 관계인 Member 와 Order 엔티티를 사용해보자. @Entity public class Member extends DateMarkable{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; @Embedded private Address address; @OneToMany(mappedBy = "member") private List orders = new ArrayList(); ......... 2021. 7. 31.