본문 바로가기

JPA5

[JPA] 상속관계 매핑 상속관계 매핑 1. 관계형 데이터베이스는 상속 관계X 2. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 3. 상속관계 매핑: 객체의 상속 구조와 DB의 슈퍼 타입 서브 타입관계를 매핑 각각의 테이블로 변환 => 조인 전략(각각 INSERT하고 조회할 때 JOIN사용) 통합 테이블로 변환 => 단일 테이블 전략(모든 필드를 하나의 테이블에) 서브타입 테이블로 변환 => 구현 클래스마다 하나의 테이블(부모 클래스는 따로 만들지 않는다) 조인 전략 장점 1. 테이블 정규화 2. 외래키 참조 무결성 제약 조건 활용 가능 3. 저장 공간의 효율화 단점 1. 조회시 조인을 많이 사용(성능 저하) 2. 데이터 저장시 INSERT문 2번 3. 조회 쿼리가 복잡함 단일 테이블 전략 장점 1. 조인이 필요 .. 2023. 8. 10.
[JPA] 영속성 관리 JPA에서 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 2. 영속성 컨텍스트 영속성 컨텍스트 1. EntityManager.persist(entity) 2. JPA를 이해하는 가장 중요한 용어 3. "엔티티를 영구 저장하는 환경" 4. 영속성 컨텍스트는 논리적인 개념이다. (눈에 보이지 않음) 5. 엔티티 메지저를 통해 영속성 컨텍스트에 접근한다. 엔티티의 생명주기 1. 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 2. 영속(managed) 영속성 컨텍스트에 관리되는 상태 3. 준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 4. 삭제(removed) 삭제된 상태 영속성 컨텍스트의 이점 1. 1차 캐시 사용(같은 트랜잭션 내에서) 2. .. 2023. 8. 10.
[JPA] 왜 JPA를 사용해야 하는가? SQL 중심적인 개발의 문제점 1. CRUD 코드를 매번 작성해야 한다. 2. 자바 객체를 SQL로, SQL을 자바 객체로 3. 객체와 관계형 데이타베이스의 패러다임 불일치 만약 중간에 필드라도 추가되면? 관련된 모든 쿼리를 수정해야 한다... public class Member { private String memberId; private String name; ... } INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES SELECT MEMBER_ID, NAME FROM MEMBER M UPDATE MEMBER SET … 객체와 관계형 데이터 베이스의 차이 1. 상속 2. 연관관계 3. 데이터 타입 4. 데이터 식별 방법 객체를 테이블에 저장하려면... 각각 객체에 맞는 쿼리.. 2023. 8. 10.
[JPA] 테이블 연관관계 정리 ORM 사용 이유 객체의 참조 방식과 관계형 DB의 연관관계는 다르다. 예를 들어 Table의 외래값을 그대로 객체로 옮긴다면 **Id 형태의 필드를 선언하지만 객체의 개념에서 다른 객체를 참조하는 개념은 아니다. 물론 Id값을 이용하여 조회하는데 사용할 수는 있지만, 객체지향 프로그래밍답지 않다. 따라서 테이블의 외래키 대신 참조 값을 넣고 어노테이션을 이용하여 테이블의 연관관계를 정의하는 것이다. 프로그래밍을 할 때는 OOP처럼 코드를 작성하되, DB에 저장할 때는 외래키로 매핑해주는 것이다. 객체 A와 B가 있다면 A에서 B로의 참조, B에서 A로의 참조를 가질 수 있다. 다만 테이블의 경우에는 한쪽 테이블에 외래키가 존재하는 경우 A테이블로 B를 JOIN, B테이블로 A를 JOIN하므로 방향을 가.. 2023. 8. 6.
[JPA] 어노테이션 정리 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. 기본 생성자를 필수적으로 가지고 있어야 한다. final 클래스와 enum, interface, inner 클래스에는 사용되지 않는다. 저장할 필드에 final을 붙이지 말아야 한다. (너무 당연한 이야기) @Table 운영 장비에서 절대 create, create-drop, update 속성을 사용하지 마라. 초기 단계에는 create 또는 update 테스트 서버는 update 또는 validate 스테이징과 운영 서버는 validate 또는 none @Column name: 이름 insertable, updatable: 데이터 추가 여부 / 업데이트 가능 여부 Length: 길이 Column Definition: 직접 생성 .. 2023. 8. 5.