JPA의 값 타입
·
JPA
JPA의 데이터 타입 분류엔티티 타입- @Entity로 정의하는 객체- 데이터가 변해도 식별자로 지속해서 추적 가능- 예) 회원 엔티티의 키나 나이값을 변경해도 식별자로 인식 가능 값 타입- int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체- 식별자가 없고 값만 있으므로 변경시 추적 불가- 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류컬렉션 타입기본값 타입- 자바 기본 타입 (int, double)- 래퍼 클래스 (Integer, Long)- String생명주기를 엔티티에 의존함 (회원 삭제 시 이름, 나이 필드도 함께 삭제)값 타입은 공유하면 안됨 (회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안됨) * 기본 타입은 항상..
프록시와 연관관계 관리
·
JPA
프록시프록시 기초em.find() vs em.getReference()- em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회- em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시 특징- 실제 클래스를 상속받아 만들어짐- 실제 클래스와 겉 모양이 같다.- 사용하는 입장에선 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨 (이론상)- 프록시 객체는 실제 객체의 참조(target)을 보관- 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출- 프록시 객체는 처음 사용할 때 한번만 초기화한다. (그 이후엔 계속 가져다 씀)- 프록시 객체를 초기화 할 때 프록시 객체를 통해서 실제 엔티티에 접근하는것이지 실제 엔티티로 바뀌는게 아..
고급 매핑 - 상속 관계, Mapped Superclass
·
JPA
DB는 상속관계라는 개념이 없다. 그래서 상속 관계 매핑은 자바의 상속 구조를 DB 테이블로 어떻게 풀어낼것인지 정하는 것이다. 1. JOINED 전략 (정규화형)@Inheritance(strategy = InheritanceType.JOINED)@DiscriminatorColumn 테이블 구조- 부모 (Item) 테이블 1개- 자식 (Album, Book, Movie) 테이블 각각 1개- PK를 공유하면서 자식 테이블이 부모 PK를 FK로 가짐 장점- 테이블 정규화를 통해 중복과 NULL 컬럼을 최소화 할 수 있다.- 자식 엔티티별 컬럼이 명확하게 분리되어 제약 조건을 적용하기 쉽다. 단점- 조회 시 조인이 많아져 성능이 낮을 수 있음- INSERT도 부모 + 자식 2번씩 생김 2. SINGLE_TA..
엔티티 매핑, 연관관계
·
JPA
객체와 테이블 매핑@Entity- @Entity가 붙은 클래스는 JPA가 관리하는 클래스이다.- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여줘야 한다.* 기본 생성자는 필수 (public or protected) @Table- @Table은 엔티티와 매핑할 테이블을 지정할 때 사용한다.- name, catalog, schema, uniqueConstraints(DDL) 속성이 있다. 데이터베이스 스키마 자동 생성 (DDL)- create (기존 테이블 삭제 후 다시 생성)- create-drop (create와 같으나 종료시점에 테이블 drop)- update (변경부분만 반영, 운영 DB엔 사용X)- validate (엔티티와 테이블이 정상 매핑 되었는지만 확인)-..
영속성 관리 - 내부 동작 방식
·
JPA
JPA에서 가장 중요한 2가지- 객체와 관계형 데이터베이스 매핑- 영속성 컨텍스트 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻em.persist(entity); 엔티티매니저와 영속성 컨텍스트- 영속성 컨텍스트는 논리적인 개념이다.- 눈에 보이지 않음- 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기- 비영속 (new/transient)영속성 컨텍스트와 전혀 관계없는 새로운 상태 : Member member = new Member(); - 영속 (managed)영속성 컨텍스트에 관리되는 상태 : em.persist(member); - 준영속 (detached)영속성 컨텍스트에 저장되었다가 분리된 상태 - 삭제 (removed)삭제된 상태 영속성 컨텍스트의 이점- 1차 캐시- 동..
스프링 트랜잭션 전파1
·
Spring
트랜잭션 전파 - 트랜잭션 두번 사용@Slf4j@SpringBootTestpublic class BasicTxTest { @Autowired PlatformTransactionManager txManager; @Autowired private DataSourceTransactionManager transactionManager; @TestConfiguration static class Config { @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataS..