Web/JPA(24)
-
JPA - @Embedded,@Embeddable 임베디드타입
JPA - @Embedded,@Embeddable 임베디드타입 지금까지는 엔티티에 연관관계를 제외하고는 모두 자바의 기본타입에 해당하는 값만 매핑하였다. 하지만 예를 들어서 주소라는 값을 하나의 엔티티에 매핑하고 싶은데, 도시명,구,동 이렇게 세가지의 기본타입(String)의 값을 매핑해야한다면 과연 3개를 쭉 나열하는 것이 객체지향적인 것인지 3개를 하나의 객체로 묶어서 하나의 객체로 값을 매핑하는 것이 객체지향적인 것인지 고민을 하자만 바로 후자일 것이다. 주소라는 하나의 객체를 만들고 그 안에 도시명,구,동 필드를 넣고 회원이라는 엔티티에는 주소라는 하나의 객체를 레퍼런스함으로써 조금더 객체지향적으로 엔티티를 매핑하는 방법인 것이다. 123456789101112131415161718192021222..
2019.02.04 -
JPA - 영속성 전이(Cascade)와 고아 객체(Orphan)
JPA - 영속성 전이(Cascade)와 고아 객체(Orphan)간단히 설명하면 영속성 전이란, 연관된 엔티티가 영속화되면, 그와 연관된 엔티티까지 모두 영속화시키는것 혹은 하나의 엔티티가 영속성 컨텍스트에서 제거가 된다면, 그와 관련된 엔티티마저 영속성 컨텍스트에서 제거가 되는 것 등의 작업흐름을 영속성 전이라고한다. 즉, 데이터베이스의 Cascade와 같은 의미이다. 고아객체란 하나의 엔티티에서 연관된 엔티티와의 참조가 끊어지면 끊어진 엔티티를 자동으로 삭제해주는 기능이다. 두개를 예제소스로 설명하겠다. 영속성 전이(Cascade = CascadeType.xxx) 우선 예제소스를 설명하기 전에 CascadeType의 종류를 나열한다면, 12345678public enum CascadeType{ ALL..
2019.02.04 -
JPA - 즉시로딩과 지연로딩(FetchType.EAGER,FetchType.LAZY) 그리고 프록시
JPA - 즉시로딩과 지연로딩(FetchType.EAGER,FetchType.LAZY) 그리고 프록시 만약 회원이라는 엔티티 객체와 팀이라는 엔티티 객체가 있고 회원:팀 = N:1 연관관계를 맺고 있다고 가정하자. 만약 회원이라는 엔티티를 데이터베이스에서 조회했을 경우 팀이라는 엔티티 객체를 같이 로딩해서 사용할 수 도 있겠지만 진짜 회원만 사용할 목적으로 엔티티객체를 조회 할 수도 있다. 그렇다면 만약 필요하지 않은 연관관계 객체의 로딩을 뒤로 미룬다면 어떻게 할까? 이것은 불필요한 데이터베이스 조회 성능을 최적화 할 수 있는 기회가 될 수 있을 것이다. 예를 들어 연관관계가 List 필드로 되어있고 연관된 객체가 수만개라면? 그리고 해당 List연관관계의 엔티티는 필요하지 않은 상황이라면? 이럴경우에..
2019.02.04 -
JPA - 하나의 엔티티에 다수 테이블 매핑(@SecondaryTable,@SecondaryTables)
JPA - 하나의 엔티티에 다수 테이블 매핑(@SecondaryTable,@SecondaryTables) 123456789101112131415@Entity@Table(name = "BOARD")@SecondaryTable(name = "BOARD_DETAIL", pkJoinColumns = @PrimaryKeyJoinColumn(name = "BOARD_DETAL_ID"))@Getter@Setterpublic class Board { @Id @Column(name = "BOARD_ID") private String id; private String title; @Column(table = "BOARD_DETAIL", name = "BOARD_CONTENT") private String content;}..
2019.02.03 -
JPA - @MappedSuperClass (매핑정보 상속)
@MappedSuperClass바로 직전의 포스트에서는 JPA에서의 엔티티 상속 전략에 대해서 다루었다. 이번에 다룰 것은 비슷한 상속개념이지만, 이전 포스트 글과는 다르게 부모에 해당하는 클래스가 테이블과 매핑되는 것이 아니라, 단순 상속받는 엔티티에게 매핑정보만 상속해주는 것이다. 즉, 객체들이 주로 사용하는 공통 매핑정보등을 정의하여 그 매핑정보를 엔티티들에게 상속해주는 것이다. 1234567891011121314151617181920212223242526272829@MappedSuperclass@Getter@Setterpublic abstract class BaseEntity { @Id @Column(name = "BASE_ID") @GeneratedValue(strategy=GenerationT..
2019.02.02 -
JPA - 상속 관계 매핑, @Inheritance, @DiscriminatorColumn
JPA - 상속 관계 매핑, @Inheritance, @DiscriminatorColumn 사실 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은 객체의 상속구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각의 테이블로 변환 4개 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다.(조인전략) 통합 테이블로 변환 단 하나의 테이블을 사용해서 상속관계를 통합한다.(단일 테이블 전략) 서브타입 테이블로 변환 서브 타입마다 하나의 테이블을 만든다(..
2019.02.02