페치 조인의 특징과 한계 페치 조인 대상에는 별칭을 줄 수 없다. 하이버네이트는 가능하지만 가급적 사용하지 않는다. 둘 이상의 컬렉션은 페치 조인 할 수 없다. 컬렉션을 페치 조인하면 페이징 API를 사용 할 수 없다. .setFirstResult(), .setMaxResults() 사용 불 가능 이러한 한계에도 불구 하고 연관된 엔티티들을 SQL 한 번으로 모두 가져올 수 있기 때문에 좋은 성능을 내기 위해서 사용하고 있다. 따라서 성능 최적화가 필요한 곳은 페치 조인을 적용한다. fetch join 정리 모든 것을 페치 조인으로 처리할 수 는 없다. 페치 조인은 객체 그래프를 유지할 때 사용하면 효과적이다. 여러 테이블을 조인해서 엔티티가 가진 모양이 아닌 전혀 다른 결과를 내야 한다면, 페치 조인보..
JPQL fetch join SQL 조인 종류가 아니다. JPQL에서 성능 최적화를 위해 제공하는 기능으로 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다. join fetch 명령어를 사용한다. ex) 회원을 조회하면서 연관된 팀도 같이 조회하고 싶다. JPQL 쿼리 → select m from Member m join fetch m.team 실제 동작하는 SQL 쿼리 → SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID 컬렉션 페치 조인 일대다 관계, 컬렉션 페치 조인 JPQL 쿼리 → select t from Team t join fetch t.members where t.name = ‘팀A' 실제 동작하는 SQL ..
JPA는 다양한 쿼리 방법을 지원한다. JPQL (대부분 이 방식을 사용) JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색 a.get() 기타 등등 ... 하지만 특별한 조건을 포함한 데이터를 알고 싶다면? EntityManagerFactory emf = Persistence.createEntityManagerFactory("Test"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try..