본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 조건식 - CASE 식 String query = "select " + "case when m.age <= 10 then '학생요금' " + " when m.age >= 60 then ...
[자바 ORM 표준 JPA 프로그래밍-기본편] JPQL 타입 표현과 기타식
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. JPQL 타입 표현 문자: ‘HELLO’, ‘She’’s’ 숫자: 10L(Long), 10D(Double), 10F(Float) Boolean: TRUE, FALSE ENUM: jpabook.MemberType.Admin (패키지명 포함) Team team =...
[자바 ORM 표준 JPA 프로그래밍-기본편] 서브 쿼리
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 서브 쿼리 나이가 평균보다 많은 회원 select m from Member m where m.age > (select avg(m2.age) from Member m2) 위에 있는 m 대신 서브 쿼리에서 새로운 m2를 사용하면 성능이 더 잘 나온다. 한 건...
[자바 ORM 표준 JPA 프로그래밍-기본편] 조인
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 조인 엔티티를 중심으로 동작한다. 객체 스타일의 문법이다. 내부 조인: SELECT m FROM Member m [INNER] JOIN m.team t member있고 team이 없으면 데이터가 아예 안나옴(교집합) String...
[자바 ORM 표준 JPA 프로그래밍-기본편] 페이징
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 페이징 API Oracle DB나 MSSQL같은 경우엔 페이징이 거지 같다. 쿼리를 막 rownum쓰고 그거를 order by까지 적용하려면 3depth로 거지같아진다.. 이러한 문제들을 깔끔하게 해결해준다. JPA는 페이징을 다음 두 API로 추상화 ...
[자바 ORM 표준 JPA 프로그래밍-기본편] JPQL 기본 문법과 쿼리 API
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. JPQL(Java Persistence Query Language) - 기본 문법과 기능 JQPL 소개 JPQL은 객체지향 쿼리 언어다.따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정데이터베이스 SQL...
[자바 ORM 표준 JPA 프로그래밍-기본편] 객체지향 쿼리(JPQL) 언어 소개
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 목차 객체지향 쿼리 언어 소개 JPQL 기본 문법과 기능 페치 조인 경로 표현식 다형성 쿼리 엔티티 직접 사용 Named 쿼리 벌크 연산 JPA는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDSL 네이티...
[자바 ORM 표준 JPA 프로그래밍-기본편] 실전 예제6 - 값 타입 매핑
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 실전 예제 - 6. 값 타입 매핑 equals() 와 hashCode() 메소드를 구현할 때 getter로 멤버변수에 접근하는게 좋다. 프록시도 안정적으로 접근할 수 있도록 @Embeddable public class Address...
[자바 ORM 표준 JPA 프로그래밍-기본편] 값 타입 컬렉션
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 값 타입 컬렉션은 값 타입을 컬렉션에 담아서 쓰는 것을 말한다. 문제는 DB에 넣을때가 문제가 된다. 기본적으로 값 타입 컬렉션을 DB에 넣는 구조를 지원하지 않는다. 결론적으로 이러한 컬렉션들을 별도의 테이블로 뽑아야한다. (FAVORITE_FOOD 테이블, ADDRESS 테이...
[자바 ORM 표준 JPA 프로그래밍-기본편] 값 타입의 비교
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 값 타입: 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야 함 int a = 10; int b = 10; a == b ? => true! Address a = new Address(“서울시”) Address b = new Address(“서울시”) a ...