JPA 9

JPA의 다양한 쿼리방법

JPA는 다양한 쿼리 방법을 지원JPQLJPA CriteriaQueryDSL네이티브 SQLJDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 가장 단순한 조회 방법 :  EntityManager.find()     /      객체 그래프 탐색(a.getB().getC()) JPQLJPA를 사용하면 엔티티 객체를 중심으로 개발문제는 검색 쿼리검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공SQL과 문법 유사, SELECT, FROM, WHERE, GRO..

JPA 2024.08.30

JPA 기본 값 타입

JPA의 데이터 타입 분류엔티티 타입 @Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경시 추적 불가예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류• 기본값 타입생명주기를 엔티티의 의존값 타입은 공유 X 회원 A 변경시 다른 회원 B의 변경이 일어나서는 안된다.   • 임베디드 타입(embedded type, 복합 값 타입)새로운 값 타입을 정의할 수 있음JPA는 임베디드 타입이라함주로 기본값 타입을 모아서 만든 복합 타입이라고도함int or Spring 같은 값..

JPA 2024.08.28

JPA 상속관계 맵핑

• 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법    • 각각 테이블로 변환 -> 조인 전략    • 통합 테이블로 변환 -> 단일 테이블 전략    • 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략  조인 전략 장점 테이블 정규화 외래 키 참조 무결성 제약조건 활용가능 저장공간 효율화 단점 조회시 조인을 많이 사용, 성능 저하 조회 쿼리가 복잡함 데이터 저장시 INSERT SQL 2번 호출  단일 테이블 전략장점조인이 필요 없으므로 일반적으로 조회 성능이 빠름조회 쿼리가 단순함단점자식 엔티티가 매핑한 컬럼은 모두 null 허용단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 상 황에 따라서 조회 성능이 오히려 느려질 수 있다.   구현 클래스마다 테이블 전략이 전..

JPA 2024.08.22

JPA 연관관계 매핑

다대일 [N:1]일대다 [1:N]일대일 [1:1]다대다 [N:M] 연관관계 매핑 시 고려사항 3가지 다중성단방향, 양방향연관관계의 주인 다중성다대일: @ManyToOne -> 가장 많이 쓴다.일대다: @OneToMany일대일: @OneToOne다대다: @ManyToMany -> 실무에서 사용하면 안 된다!대칭성이 있다고 생각하면 생각하기 편하다. 단방향, 양방향테이블외래 키 하나로 양쪽 조인 가능사실 방향이라는 개념이 없음 객체참조용 필드가 있는 쪽으로만 참조 가능한쪽만 참조하면 단방향양쪽이 서로 참조하면 양방향 ->이해하기 쉽게 표현한 것이지 방향은 하나다.연관관계의 주인 • 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음• 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데• 객체 양방향 ..

JPA 2024.08.22

JPA 연관관계

방향(Direction): 단방향, 양방향다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해연관관계의 주인(Owner).. 어려운 내용: 객체 양방향 연관관계는 관리 주인이 필요 JPA계의 포인터 import jakarta.persistence.*;@Entity@TableGenerator( name = "MEMBER_SEQ_GENERATOR", table = "MY_SEQUENCES", pkColumnValue = "MEMBER_SEQ", allocationSize = 1)public class Member { @Id @GeneratedValue(strategy = GenerationType.SEQU..

JPA 2024.08.21

JPA 플러시

플러시란?영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는것변경 감지수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시하는 방법em.flush() - 직접 호출  -> 테스트할때만 거의 사용함 쓰기지연 SQL 저장소에 있는 데이터가 데이터베이스에 반영됨트랜잭션 커밋 - 플러시 자동 호출JPQL 쿼리 실행 - 플러시 자동 호출 Member member = new Member(200L, "member200"); em.persist(member); em.flush(); //다 즉시 일어난다.  (플러시를 하더라도 1차 CASH는 유지가 된다. 쓰기 ..

JPA 2024.08.15

JPA 영속성

JPA에서 가장 중요한 2가지객체와 관계형 데이터베이스 매핑하기영속성 컨텍스트 ( 실제 어떻게 돌아가는지에 관련)     이점을 얻을 수는 있으나 크게 도움이 되지는 않는다. member 1과 2를 둘 다 조회해도 쿼리가 한 번만 선언이 된다.member 1과 member 2를 ==동일성으로 해도 true가 된다. 동일성을 보장을 해준다. => 1차 Cash가 있기에 가능하다. 내부적으로의 상황tx.commit(); //이것을 한 시점에 데이터베이스 쿼리에 등록   변경할 시에.. 스냅샷은 값을 읽어온 그 시점을 스냅샷으로 설정을 하는 것이다.  Entity 삭제는em.remove(이름); 하면 된다

JPA 2024.08.15

JPA란?

JPA는 Java Persistence API 자바 진영의 ORM 기술 표준이다.여기서 ORM이란 bject-relational mapping(객체 관계 매핑)으로  객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한 후 ORM 프레임워크가 중간에서 매핑을 한다.  EJB는 너무 성능이 떨어지기 때문에 JPA로 사용하게 되었다. 오픈소스에서 출발한 표준이기 때문에 매우 실용적이고 정제되어있다.  구현체로는 대부분 하이버네이트를 사용한다. JPA를 구현한 하이버네이트가 있다.  그렇다면 왜 JPA를 사용하는가?SQL 중심적인 개발 -> 객체 중심 개발생산성 증가유지보수 편이함패러다임 불일치 해결성능 상승데이터접근 추상화표준화의 장점들이 있다.  생산성 상승 하는 이유 : 아래처럼 편..

JPA 2024.08.15