💻dev

페치 조인 SQL 조인의 종류가 아니라 JPQL에서 성능 최적화를 위해 제공하는 기능이다. 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다. join fetch 명령어를 사용한다 엔티티 페치 조인 예) 회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에) SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECT [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 예제 시나리오) 페치 조인 사용 코드) String jpql = "select m from Member m join fetch m.team"; List me..
경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 예) select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 용어 정리 상태 필드: 단순히 값을 저장하기 위한 필드 연관 필드: 연관관계를 위한 필드 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션 경로 표현식 특징 상태 필드: 경로 탐색의 끝, 탐색 X JPQL: select m.username, m.age from Member m SQL: select m.username, m.ag..
JPQL 타입 표현 문자: 'HELLO', 'She ''s' 숫자: 10L(Long), 10D(Double), 10F(Float) Boolean: TRUE, FALSE ENUM: jpabook.MemberType.Admin (패키지명 포함!) 엔티티 타입: TYPE(m) = Member (상속 관계에서 사용) 기타 SQL 문법과 거의 같다고 보면 된다. 따라서 아래 식들도 당연히 사용 가능하다. EXIST, IN AND, OR, NOT = > >= 소문자로 바꾼다. LENGTH : 문자의 길이를 반환한다. LOCATE : 특정 문자의 위치를 반환한다. locate('de', 'abcdef') ABS, SQRT, MOD : 절댓값, 루트값, 나눈 나머지 반환한다. SIZE, INDEX(JPA..
조인 내부 조인: SELECT m From Member m [INNER] JOIN m.team t 외부 조인: SELECT m From Member m LEFT [OUTER] JOIN m.team t 세타 조인(cross join): select count(m) from Member m, Team t where m.username = t.name 조인 - ON절 1. 조인 대상 필터링 예) 멤버와 팀을 조인하면서, 팀 이름이 A인 팀만 조인 JPQL: SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A' SQL: SELECT m.*, t.* FROM Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='..
오류 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException 원인 Java11을 사용하는데 해당 버전에서는 JAXV API를 JDK에서 제거한 상태다. 해결 pom.xml에 아래 dependency를 추가해주면 해결된다. javax.xml.bind jaxb-api 2.3.0 참고 https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException I have some c..
프로젝션 SELECT 절에 조회할 대상을 지정하는 것 프로젝션 대상: 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입) SELECT m FROM Member m -> 엔티티 프로젝션 SELECT m.team FROM Member m -> 엔티티 프로젝션 SELECT m.address FROM Member m -> 임베디드 타입 프로젝션 SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션 DISTINCT로 중복 제거 예) Member member = new Member(); member.setUsername("mem1"); member.setAge(10); em.persist(member); //영속성 컨텍스트를 비움 em.flush(); ..
JPQL 문법 엔티티와 속성은 대소문자 구분한다. JPQL 키워드는 대소문자 구분 안한다. 엔티티 이름 사용, 테이블 이름이 아니다. 별칭은 필수(예: m) (as는 생략가능) 예) select m from Member m where m.age > 18 집합과 정렬 GROUP BY, HAVING, ORDER BY도 전부 사용한다. select COUNT(m), //회원수 SUM(m.age), //나이 합 AVG(m.age), //평균 나이 MAX(m.age), //최대 나이 MIN(m.age) //최소 나이 from Member m TypeQuery와 Query TypeQuery: 반환 타입이 명확할 때 사용 Query: 반환 타입이 명확하지 않을 때 사용 예) Member member = new Mem..
JPQL이란? JPA가 제공하는 SQL을 추상화한 객체 지향 쿼리 언어이다. SQL과 문법이 유사하며 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원 JPQL은 엔티티 객체를 대상으로 쿼리(SQL은 데이터베이스 테이블을 대상으로 쿼리) SQL을 추상화 했기 때문에 특정 데이터베이스 SQL에 의존하지 않는다. 예시) //검색 String jpql = "select m from Member m where m.age > 18"; List result = em.createQuery(jpql, Member.class) .getResultList(); 실행된 SQL select m.id as id, m.age as age, m.USERNAME as USERNAME, m.TEAM..
쁜새
'💻dev' 카테고리의 글 목록 (10 Page)