jpa 4

고급 매핑 - 상속관계 매핑, @MappedSuperclass

상속관계 매핑과 @MappedSuperclass에 대해서 알아보도록 하겠다. 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다. 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 3가지가 있다 1. 각각 테이블로 변환 -> 조인 전략 2. 통합 테이블로 변환 -> 단일 테이블 전략 3. 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 조인 전략 엔티티마다 모두 테이블로 만들어주고 부모의 기본키를 기본키 + 외래 키로 사용함. 그래서 조회할 때 조인을 사용함. 다만 객체는 타입이 있는데 테이블은 타입에 개념이 없으니 따로 컬럼을 추가해줘야..

Spring 2022.11.01

엔티티의 생명주기

엔티티는 4단계의 생명 주기 비영속 (new/transient) 영속 (managed) 준영속 (datached) 삭제 (removed) 영속성 관리 비영속 (new/transient) 비영속 상태는 객체를 새로 생성한 상태이다. JPA와 전혀 관계없이 객체만 생성한 상태이다. Member member = new Member(1L,"test"); //member는 비영속 상태 영속 상태가 아니므로 당연히 영속성 컨텍스트에 의해 관리되지 않으며, 1차 캐시, 변경감지등의 기능이 적용되지 않는다. 영속 (managed) 영속성 컨텍스트에 의해서 관리되어지는 상태이다. 생성한 객체를 em.persist()를 통해 영속성 컨텍스트에 저장하거나, 혹은 em.find()를 통해 DB에서 엔티티를 조회하면 영속성 컨..

Language/Java 2022.10.10

엔티티 설계 주의점

연관관계 매핑 분석 1:N, N:1 양방향 관계에서는 외래키가 있는엔티티를 주인으로 정하는것이 좋다. 연관관계의 주인쪽의 값을 세팅해야 값이 변경된다. 1:N에서 일 부분에 있는 mappedBy는 단순히 읽기만 하는 역할(단순 조회용)이며, 연관관계의 주인쪽에 세팅을 해야 값이 변경된다. 외래키가 가까운 곳에 있는 것을 연관관계의 주인으로 정하는 것이 좋다. N:N 돤계에서는 @ManyToMany 사용은 권장되지 않고 1:N + N:1로 풀어내는 것을 권장한다. 엔티티 설계시 주의점 Entity에서는 가급적 Setter를 사용하지 말자. 변경포인트가 많아서 유지보수가 어렵다. 모든 연관관계는 지연로딩으로(lazy loading) 설정한다. 즉시로딩(Eager)은 예측이 어렵고, 어떤 SQL이 실행될지 추..

Spring 2021.11.21

JPA와 JDBC 이 무엇일까

JDBC의 특징 JDBC는 DB에 접근 할 수 있도록 자바에서 제공하는 API이다 1. sql문 일일이 하나하나 작성해야했다. 2. connection 관리 connection 관리을 했어야했다. 3. preparedstatement, resultset 객체 결과값을 전달하고 받아야했다. connectin 객체가 db와 app의 연결을 관리하고 preparedstatement가 sql을 전달하며, resultset 객체를 통해 결과 값을 전달한다. JPA의는 애플리케이션과 JDBC 사이에서 동작한다. - 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다. jpa 장점 1. 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할수 있으..

Language/Java 2021.05.28