JPA 5

JPA, JPQL(JPA Query Language) 요약

JPQL이란 JPA는 RDB 종류와 관계없이 작업을 처리해야함 JPQL(JPA Query Language) 등장 JPQL은 영속성 컨테이너에서 등록된 엔티티를 조작 JPQL은 영속성 컨테이너에서 관리 상태인 엔티티를 대상으로 검색 SQL과 구조와 사용법이 유사함 목록 질의 등을 수행하기 위해서 createQuery(String jpql) 메서드 사용 구조 SELECT 검색하려는 엔티티, 엔티티의 변수 목록 FROM 검색 대상인 엔티티, 엔티티 목록 WHERE 연산자, 함수 등으로 검색 제약 조건 표현 GROUP BY 검색 대상 엔티티를 특정 조건으로 그룹핑 HAVING 그룹핑된 엔티티에 제약조건 표현 ORDER 검색 결과에 대한 정렬 방식 JPQL 사용 주의사항 FROM 절에서는 검색 대상 엔티티의 이름..

JPA, 연관관계 매핑

RDB의 데이터들은 정규화 과정을 통해서 테이블 간 관계가 형성됨 JPA는 이러한 RDB의 관계를 객체를 통해서 표현해야함 연관관계 매핑은 RDB 테이블 간 관계를 Java 객체로 표현하는 것 연관관계 매핑을 통해서 불필요한 Join을 줄일 수 있고, 데이터 적재 시점을 결정할 수도 있음 테이블의 관계는 항상 양방향, 객체의 관계는 방향성이 있기 때문에 이러한 특성을 고려해야함 연관관계 매핑 기준 방향성 객체는 방향성이 존재(단방향, 양방향) 테이블은 항상 양방향 다중성 N:1, 1:N, 1:1, N:M @ManyToOne 엔티티 간 N:1 관계를 표현 N인 엔티티에서 반대편 엔티티 객체를 표현할 때 사용 주요 속성 optional 연관 엔티티의 필수 여부 false --> 연관 엔티티가 필수 false..

JPA, 영속성 컨텍스트와 상태 관리

영속성 컨텍스트란 엔티티를 관리해주는 컨테이너 엔티티는 다양한 상태로 존재함 엔티티의 상태를 기준으로 DB와 애플리케이션 사이에서 캐시의 역할을 수행 컨테이너에서 필요한 정보를 persistence.xml로부터 가져옴 entityManager를 생성할 때 자동으로 생성되며, entityManager의 메서드를 통해서만 접근할 수 있음 엔티티의 상태 생성(new) 비영속 상태 엔티티가 컨테이너에 등록되지 않은 상태 엔티티 객체는 컨테이너와 DB와 아무런 관련이 없음 관리(managed) 영속 상태 엔티티가 컨테이너에 등록된 상태 persist()에 의한 managed 실제 persist 메서드가 트랜잭션 안에서 이뤄져야 함 managed 상태의 엔티티를 수정하면 트랜잭션 종료시점에 update 처리가 이뤄..

JPA의 엔티티 매핑

JPA에서는 데이터베이스의 테이블과 객체를 annotation으로 연결합니다. 주요 에너테이션 @Entity 에너테이션이 명시된 클래스의 인스턴스를 엔티티로 식별합니다. 일반 자바 객체와 구별하는 에너테이션입니다. 해당 클래스는 @Id가 선언된 식별자 필드가 있어야 합니다. 에너테이션의 name 속성을 지정하지 않으면 JPA는 클래스 이름을 엔티티 이름으로 등록합니다. @Id 엔티티 객체의 식별자 필드를 지정합니다. JPA에서 엔티티 객체를 등록하기 위해서 반드시 식별자 필드가 있어야 합니다. @Table 엔티티 이름과 테이블 이름이 다를 경우, 해당 에너테이션으로 매핑할 테이블을 지정합니다. 속성 name : 매핑할 테이블을 지정합니다. catalog : DB 카탈로그를 지정합니다.(MySQL) sch..

Spring Data JPA Repository Query method 키워드

Supported query keywords Logical keyword : Keyword expressions AND : And OR : Or AFTER : After, IsAfter BEFORE Before, IsBefore CONTAINING : Containing, IsContaining, Contains BETWEEN : Between, IsBetween ENDING_WITH : EndingWith, IsEndingWith, EndsWith EXISTS : Exists FALSE : False, IsFalse GREATER_THAN : GreaterThan, IsGreaterThan GREATER_THAN_EQUALS : GreaterThanEqual, IsGreaterThanEqual IN :..