JPA학습내용
환경 설정 및 구성 예제 실습
JPA가 제공하는 기능은 크게 엔티티와 테이블을 매핑하는 설계부분과 매핑한 엔티티를 실제 사용하는 두가지 부분으로 나눌 수 있다. 여기서는 매핑한 엔티티를 엔티티 매니저를 통해 사용하는 것을 알아보자. 영속성 관리 엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회 등
JPA에서 가장 중요한 것은 엔티티와 테이블 매핑을 정확히 하는 것이다. 매핑 어노테이션을 잘 숙지해야 한다. 객체와 테이블 매핑 : @Entity, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관관계 매핑 : @ManyToOne, @Jo
엔티티들은 대부분 다른 엔티티와 연관이 있다.연관관계 매핑 핵심 키워드방향 : 객체관계에서만 존재하고 실제 테이블 관계는 항상 양방향단방향 : 두 엔티티중 하나만 참조하는 것이양방향 : 두 엔티티가 서로 참조하는 것다중성 : 다대일(N:1), 일대일(1:1), 일대다(
엔티티 연관관계를 매핑할때는 다음 3가지를 고려해야 한다. 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 단방향, 양방향 테이블은 외래키 하나로 조인을 사용하여 양방향 쿼리가
이번 장에서 다루는 내용들이다.상속 관계 매핑@MappedSuperclass복합 키와 식별 관계 매핑조인 테이블엔티티 하나에 여러 테이블 매핑하기RDBMS에는 객체지향 언어처럼 상속이라는 개념이 없다.대신 그림과 같이 슈퍼타입 서브타입 관계 라는 모델링 기법이 상속 개
객체는 객체 그래프로 연관된 객체들을 탐색.그렇지만 객체가 DB에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다.JPA구현체들은 이것을 해결하기 위해 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 DB에서 조회하는 것이 아니라, 실제
JPA의 데이터 타입을 크게 분류하면 엔티티 타입과 값 타입으로 나눈다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 값 타입은 3가지로 나눌 수 있다
JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리기술을 지원한다. JPQL은 가장 중요한 객체지향 쿼리 언어이다. 다른 Criteria나 QueryDSL은 JPQL을 편리하게 사용하도록 도와주는 기술이므로 JPA를 다루는 개발자라면 JP
JPQL 다시한번 JPQL의 특징을 정리해보자 JPQL은 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 DB SQL에 의존하지 않는다. JPQL은 결국 SQL로 변환된다.
책의 내용이 너무많아 계속 분리해서 작성하게 된다.이번 포스팅에서는 서브 쿼리부터 내용을 다뤄보도록 하겠다.JPQL도 SQL처럼 서브 쿼리를 지원하는데, 여기서는 몇 가지 제약사항이 있다.서브 쿼리를 WHERE, Having 절에서만 사용할 수 있고 select, fr
QueryDSL Criteria의 단점 너무 복잡하고 어렵다는 것 그래서 JPQL이 어떻게 생성되는지 파악이 어렵다. 그래서 나온게 이 QueryDSL이다.. 코드로 작성하는데 간결하고 알아보기 쉽다. QueryDSL은 오픈소스 프로젝트이다. 단순 CRUD보다는 이름
이번 포스팅에서는 조인에 대해 알아볼 것이다.조인은 innerJoin(join), leftJoin, rightJoin, fullJoin을 사용할 수 있고 추가로 JPQL의 on과 성능 최적화를 위한 fetchJoin을 사용할 수 있다.연관관계가 있으면 그냥 join만
JPQL은 표준 SQL이 지원하는 대부분의 문법과 SQL함수를 지원한다.근데 특정 DB의 방언과 같은 종속적 기능은 지원하지 않는다.특정 DB만 지원하는 함수, 문법, SQL 쿼리 힌트인라인 뷰(from절 서브쿼리), UNION, INTERSECT스토어드 프로시저종속적
한번에 여러 데이터를 수정할 수 있는 벌크 연산이 있다.엔티티를 수정하려면 영속성 컨텍스트 변경 감지 기능이나 병합을 사용하고, 삭제하려면 em.remove() 를 사용한다. 데이터를 하나씩 처리하기엔 너무 오래걸려서 여러개를 동시에 처리할 수 있는 벌크연산이 있다.벌