본문 바로가기
728x90
반응형

자바/JPA30

[JPA/Java] JPQL 경로 표현식 JPQL에는 경로 표현식이라는 개념이 있다. 경로표현식이란? .(점)을 찍어서 객체 그래프를 탐색하는 것이다. 예를 들면 아래와 같은 개념으로 이해하면 된다. 경로 표현식에는 두 개념이 있다. 상태 필드와 연관 필드인데, 상태 필드(state field)는 단순히 값을 저장하기 위한 필드이다. 예를 들면 m.username 과 같이 SELECT 문에서 사용하는 것처럼.. 연관 필드(association field)는 연관관계를 위한 필드인데, 단일 값 연관 필드가 있고, 컬렉션 값 연관 필드가 있다 (1) 단일 값 연관 필드 : - @ManyToOne, @OneToOne, 대상이 엔티티(ex : m.team) (2) 컬렉션 값 연관 필드 : - @OneToMany, @ManyToMany, 대상이 컬렉션(.. 2023. 5. 10.
[JPA/Java] JPQL 기본함수 및 사용자 정의 함수 호출 JPQL은 웬만한 DBMS가 제공하는 기본적인 함수들을 제공하고 있다. 함수명 용도 CONCAT 문자열 이어 붙이기 SUBSTRING 부분 문자열 만들기 TRIM 빈 공백 없애기 LOWER, UPPER 소문자, 대문자 LENGTH 문자열의 길이 LOCATE 문자열의 위치(Integer 값) ABS, SQRT, MOD 절대값, 제곱근, 나누기 SIZE, INDEX(JPA 용도) 컬렉션(또는 엔티티)의 전체 크기, 컬렉션의 위치 예시) CONCAT String jpql = ""; // uninject language를 적용하면 된다. 방법 : 해당 문자열 내에서 ALT + ENTER 누르면 안내문이 나옴 jpql = "select 'a' || 'b' From Member m"; List resultList .. 2023. 5. 10.
[JPA/Java] JPQL CASE 문, COALESCE, NULLIF JPQL도 SELECT 문에 CASE 문을 사용할 수 있다. JPQL 기본 CASE 식 String query = "select " + " case when m.age = 60 then '경로요금' " + " else '일반요금' " + " end " + " from Member m"; 단순 CASE 식 String query = "select " + " case t.name " + " when '팀A' then '인센티브110%' " + " when '팀B' then '인센티브120%' " + " else '인센티브105%' " + " end " + " from Team t"; JPQL CASE 예시) JpaMain.java Team team = new Team(); team.setName("teamA.. 2023. 5. 9.
[JPA/Java] JPQL 타입 표현과 기타식 JPQL에서 타입 표현은 아래와 같이 가능하다. (1) 문자 : 'HELLO', 'She''s' : ' 를 표현하려면 두번 적으면 된다. (2) 숫자 : 10L(Long), 10D(Double), 10F(Float) (3) Boolean : TRUE, FALSE (4) ENUM : jpabook.MemberType.Admin (패키지명 포함) 예시) ① MemberType.java 생성 package jpql; public enum MemberType { ADMIN, USER } ② Member.java 에 MemberType type 추가 @Enumerated(EnumType.STRING) private MemberType type; public MemberType getType() { return t.. 2023. 5. 9.
[JPA/Java] JPQL 서브쿼리 JPQL 에서도 서브쿼리를 사용할 수 있다. JPQL 서브쿼리 예시를 보면 예시) 나이가 평균보다 많은 회원 String jpql = "SELECT m FROM Member m WHERE m.age > (SELECT avg(m2.age) FROM Member m2)" 예시) 한 건이라도 주문한 고객 String jpql = "SELECT m FROM Member m WHERE (SELECT count(o) FROM Order o WHERE m = o.member) > 0" 서브 쿼리에서 지원되는 함수가 몇 있다. 1) [NOT] EXISTS (subquery) : 서브쿼리에 결과가 존재하면 참 - {ALL | ANY | SOME} (subquery) - 모두 만족하면 참 - ANY, SOME : 같은 의.. 2023. 5. 9.
[JPA/Java] JPQL 조인(Join) JPQL을 이용하여 조인을 할 수 있다. 내부 조인[INNER JOIN] SELECT m FROM Member m [INNER] JOIN m.team t 외부 조인[OUTER JOIN] SELECT m FROM Member m LEFT [OUTER] JOIN m.team t 세타 조인 SELECT COUNT(m) FROM Member m, Team t WHERE m.username = t.name JPQL에도 ON 절을 이용할 수 있다. ON 절을 활용한 조인은 JPA 2.1부터 지원되는데, ON 절을 활용한 조인은 1) 조인 대상을 필터링할 때 2) 연관관계가 없는 엔티티를 외부 조인(OUTER JOIN)할 때 인데, 연관관계가 없는 엔티티를 외부 조인할 때는 하이버네이트 5.1부터 사용 가능하다. 1.. 2023. 5. 9.
728x90
반응형