- 상태 필드(state field) : 단순히 값을 저장하기 위한 필드
- 연관 필드(association field): 연관관계를 위한 필드
- 단일 값 연관 필드:
@ManyToOne, @OneToOne, 대상이 엔티티
- 컬렉션 값 연관 필드:
@OneToMany, @ManyToMany, 대상이 컬렉션
아예 묵시적 내부 조인 안쓰는게 좋암~~!!! => 나중에 유지보수가 힘듬
페치 조인(이거는 실무는 엄청 중요함)
- SQL 조인 종류 X
- JPQL에서 성능 최적화를 위해 제공하는 기능
- 연관된 엔티티나 컬렉션을 SQL한 번에 함께 조회하는 기능
- join fetch 명령어 사용
- 페치 조인 ::= [LEFT [OUTER] | INNER] JOIN FETCH 조인경로
package jqpl;
import javax.persistence.*;
import java.util.List;
public class JapMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpql");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Team teamA = new Team();
teamA.setName("teamA");
em.persist(teamA);
Team teamB = new Team();
teamB.setName("teamB");
em.persist(teamB);
Member member = new Member();
member.setUsername("회원1");
member.setTeam(teamA);
em.persist(member);
Member member2 = new Member();
member2.setUsername("관리자2");
member2.setTeam(teamB);
em.persist(member2);
Member member3 = new Member();
member3.setUsername("관리자2");
member3.setTeam(teamB);
em.persist(member3);
em.flush();
em.clear();
String query = "select m From Member m join fetch m.team";
List<Member> resultList = em.createQuery(query, Member.class).getResultList();
for (Member member1 : resultList) {
System.out.println("member1.getUsername() + = " + member1.getUsername() + ", " + member1.getTeam().getName());
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
em.clear();
}
emf.close();
}
}
'Spring' 카테고리의 다른 글
스프링부트 & jpa1 / 2 - 요구사항 분석 (0) | 2021.07.26 |
---|---|
스프링부트 & jpa1 / 1 - 프로젝트 생성 (0) | 2021.07.25 |
15. 조인 (0) | 2021.07.24 |
14. 기본 문법과 쿼리 API (0) | 2021.07.24 |
13. 객체지향 쿼리 언어(JPQL) (0) | 2021.07.24 |