JPQL - 경로 표현식경로 표현식이란 .(점)을 찍어 객체 그래프를 탐색하는 것이다.select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드where t.name = '팀A'상태 필드로 가냐 단일값 연관필드로 가냐 컬렉션값 연관필드로 가냐에 따라서 내부적으로 동작하는 방식이 달라 결과가 달라진다. 그래서 이 세 가지를 꼭 구분해서 이해를 해야 된다.경로 표현식 용어 정리상태 필드(state field): 단순히 값을 저장하기 위한 필드(ex: m.username)연관 필드(association field): 연관관계를 나타내기 위한 필드연관 필드는 두 가지로 나눠진다..
JPA/JPA 기본
객체지향 쿼리 언어 소개JPA는 다양한 쿼리 방법을 지원JPQLJPA CriteriaQueryDSL네이티브 SQLJDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용JPQL 소개가장 단순한 조회 방법EntityManager.find()객체 그래프 탐색(a.getB().getC())나이가 18살 이상인 회원을 모두 검색하고 싶다면?JPQLJPA를 사용하면 테이블이 아닌 엔티티 객체를 중심으로 개발해야 한다.SQL은 테이블을 대상으로 작성되기에 테이블에 종속적이게 된다.문제는 검색 쿼리다.왜냐면 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 되기 때문이다.모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.결국은 애플리케이션이 필요한 데이터만 DB..
기본값 타입JPA는 데이터 타입을 최상위 레벨로 보면 엔티티 타입과 값 타입으로 분류한다.엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자(PK)로 지속해서 추적 가능예) 회원 엔티티의 몸무게나 나이 값을 변경해도 식별자로 인식 가능값 타입int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경 시 추적 불가예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체값 타입 분류 기본값 타입자바 기본 타입(int, double) -> primitive 타입래퍼 클래스(Integer, Long)String임베디드 타입(embedded type, 복합 값 타입)컬렉션 값 타입(collection value type)기본값 타입예..
프록시Member를 조회할 때 Team도 함께 조회해야 할까?코드예시회원과 팀 함께 출력public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName());}member와 team을 같이 가져와서 사용하고 싶은 경우회원만 출력public void printUser(String memberId) { Member member = em.find(Memb..