본문 바로가기

반응형

분류 전체보기

(236)
[JPA] 값 타입 JPA 의 데이터 타입 1. 엔티티 타입 - @Entity 로 정의하는 객체 - 식별자 (id) 를 가지고 있어서 데이터가 변해도 식별자로 추적가능 2. 값 타입 - int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 값 타입 분류 1. 기본값 타입 자바에서 제공하는 기본 데이터 타입을 의미한다. 자바의 primitive type, wrapper class, String 등을 포함하는 값 타입이다. String name, int age 와 같이 엔티티에 정의되어 있는 기본 타입의 값들이다. 이러한 타입의 값들은 다른 엔티티와 공유해서는 안된다. 값 복사를 통해서 사용해야 한다. 그 이유는 공유된 값들이 변경됨으로 발..
[JPA] 영속성 전이 (CASCADE) 1. 영속성 전이 (CASCADE) 특정 엔티티를 영속상태로 만들 때 연관관계에 있는 엔티티도 함께 영속상태로 만들기 위해서 사용한다. 예를들어 부모 엔티티가 영속화 될 때 자식 엔티티도 영속화 되도록 한다. CASCADE 를 설정한다고 해서 연관관계를 매핑에 변동은 없다. 다만 연관관계가 매핑되어 있을때 연관된 객체들의 영속화를 편리하게 해주는 것 뿐이다. 연관관계 매핑 어노테이션에서 cascade 옵션을 사용하여 지정한다. @OneToMany(mappedBy="parent", cascade=CascadeType.ALL) private List children = new ArrayList(); 2. CASCADE 종류 - CascadeType.ALL: 모든 Cascade 를 적용한다. - Cascade..
[JPA] 프록시와 지연로딩 1. 프록시 프록시 사용 이유 다른 엔티티와 연관관계를 가지고 있는 엔티티의 객체를 조회하는 경우 연관관계가 있는 객체들도 조회하게 된다. 이 경우에 불필요한 객체들이 함께 조회되면서 리소스 낭비가 발생하게 될 수 있다. JPA 에서는 이러한 문제를 프록시와 지연로딩을 사용하여 해결한다. 프록시 객체 조회 엔티티를 조회하는 방식으로는 다음의 두가지가 있다. em.find(): 바로 DB 에서 조회하여 실제 엔티티 객체 조회. em.getReference(): DB 조회를 미루고 가짜 (프록시) 엔티티 객체 조회. 해당 객체의 필드를 조회하는 경우에 쿼리를 수행하여 DB 조회를 수행한다. 프록시 엔티티는 실제 클래스를 상속받아서 생성된다. 실제 클래스와 형태가 같아서 사용자 입장에서 실제 객체인지 프록시 ..
[JPA] 상속관계 매핑 상속관계 매핑 객체는 부모 클래스와 자식 클래스의 상속관계가 있지만, 관계형 데이터베이스는 상속관계가 존재하지 않는다. 대신 데이터베이스에는 슈퍼타입, 서브타입 관계라는 모델링 기법이 있는데, 이 기법이 객체의 상속과 유사한다. 이 방법을 객체의 상속과 매핑하여 상속관계를 구현한다. ※ 슈퍼타입 - 서브타입 모델링 공통 속성을 가진 여러개의 데이터들이 존재할 때, 이들을 어떻게 관리할 것인지에 대한 방법이다. 슈퍼타입 모델링은 전체 데이터를 하나의 슈퍼 테이블로 관리하는 방식이다. 이 방식으로 관리하는 경우, 전체 검색에 유리하지만 공통 속성을 제외한 나머지 속성에 대해서 NULL 값이 저장되는 단점이 있다. 서브타입 모델링은 각 데이터들을 공통 속성 + 서브 속성으로 각각의 서브타입별로 데이터를 저장하..
[JPA] 연관관계 매핑 종류 객체간의 연관관계를 매핑할 때는 다음의 요소들을 고려해야한다. 1. 다중성 - 1:1, 1:N, N:1, N:M 2. 방향성 - 단방향, 양방향 3. 연관관계의 주인 위의 요소들을 고려하여 JPA 에서는 다양한 연관관계 매핑을 사용할 수 있다. 1. 다대일 [N:1] 다대일 단방향 여러개의 객체가 하나의 객체를 참조하는 구조이다. 데이터베이스 테이블의 관계에서는 N 에 해당하는 테이블이 1 에 해당하는 테이블의 키를 외래키로 가진다. 객체의 연관관계에서는 외래키가 있는 테이블의 객체가 1 에 해당하는 테이블을 참조하여 매핑한다. @ManyToOne, @JoneColumn 등의 어노테이션을 사용하여 구현한다. @Entity public class Team { @Id @GeneartedValue @Colum..
[JPA] 연관관계 매핑 (2) - 양방향 연관관계 1. 양방향 연관관계 양방향 연관관계는 두 객체가 서로 상대편을 참조하고 있는 연관관계를 의미한다. 기존의 단방향 연관관계에서는 참조하는 객체만 반대편 객체를 외래키와 매핑하여서 참조하고 있었다. 하지만 양방향 연관관계에서는 참조되는 객체도 참조하는 객체를 바라보고 있어서 반대 방향에서도 객체 그래프 탐색이 가능하다. // 참조되던 쪽에서는 참조하는 쪽을 바라보기 위한 멤버가 추가된다. class Team { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "team") // 일대다 관계. Member 객체의 team 에 매핑된다. List members = new ArrayList(); // 해당 team 에 해당하는 member 들을 List ..
[JPA] 연관관계 매핑 (1) - 단방향 연관관계 DB 에서는 테이블의 외래키를 이용하여 테이블간의 연관관계를 구성한다. JPA 는 전통적인 테이블 간의 관계를 객체간의 연관관계로 매핑시켜준다. 객체의 참조변수와 테이블의 외래키를 매핑시켜서 연관관계를 객체지향적으로 변환시켜준다. JPA 에서 연관관계는 방향에 따라서 단방향, 양방향으로 구분이 되며, 서로의 연관을 가지는 객체의 개수 (다중성, multiplicity) 에 따라서 다대일, 일대다, 일대일, 다대다 등으로 구분이 된다. 또한 양방향 연관관계에서 연관관계의 주인, owner 를 지정하여 어떤 객체가 해당 데이터의 관리 권한을 가질 것인가를 결정한다. 1. 연관관계의 필요성 객체의 연관관계가 없이 테이블의 연관관계를 기반으로 설계를 하게되면 객체지향적인 설계를 할 수가 없어진다. 테이블은 외래..
[JPA] 영속성 관리 JPA 는 영속성 컨텍스트를 통해서 객체와 DB 사이의 entity 를 관리한다. 영속성 컨텍스트는 entity manager 에 의해 관리되는데, 이를 통해서 애플리케이션과 데이터베이스 사이에서 데이터가 처리된다. - EntityManagerFactory 애플리케이션 로딩 시전에 DB 당 하나만 생성되는 팩토리이다. 요청이 있을 때마다 EntityManager 를 생성한다. - EntityManager 영속성 컨텍스트를 관리하는 객체이다. 실제 transaction 단위를 수행할 때마다 생성하는데, DB Connection 을 통해서 DB 에 접근한다. 1. 영속성 컨텍스트 (Persistence Context) 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이다. 애플리케이션과 데이터베이스 사이에서 엔..

반응형