분류 전체보기

1. 매핑 관계에서 다대일? 단방향? 양방향? 매핑을 설명할 때 다대일, 단방향, 양방향 이러한 이야기가 나오곤한다. 먼저 다대일의 개념을 설명하면 다음과 같다. 학창 시절 학생들은 특정 반에 속해있다. 이러한 관계를 다대일이라고 한다. 이를 표현하면 아래와 같다. 그렇다면 단방향? 양방향은 무엇일까? 엔티티를 정의할 때 한쪽 엔티티에만 다른 엔티티를 정의하면 단방향 연관관계, 양쪽에 각각 정의를 하면 양방향 연관 관계라고 한다. 2. mappedBy? JPA의 경우 mappedBy를 명시하지 않으면 두 엔티티가 양방향 관계임을 모르게 된다. mappedBy란 JPA 엔티티의 양방향 연관관계에서 연관관계의 주인을 표기해주는 옵션이다. 3. 연관관계의 주인이란? 연관관계의 주인이란? FK를 관리하게 되는 ..
· Backend/Java
1. 서두 JAVA 개발, 혹은 공부를 하다보면 래퍼 클래스에 대해 자주 접하게된다. 래퍼 클래스란 무엇이고 왜 필요한지에 대해 정리를 해볼까 한다. 2. 래퍼 클래스(wrapper class)? wrapper란 우리가 흔히 영어에서 사용하는 것과 같이 무엇인가를 포장할 때 사용되는 단어이다. 자바의 자료형은 총 8개의 기본 타입이 있다. 이를 우리는 primitive type이라고 부른다. 때때로 기본형의 자료 타입을 객체화가 필요한데 기본형의 자료 타입을 객체화 해준 것을 래퍼 클래스라고 한다. 기본형과 래퍼 클래스는 다음과 같다. Primitive Wrapper Class byte Byte short Short int Integer long Long flat Float double Double ch..
1. CasCade란? 엔티티의 상태 변화를 전파시키는 옵션이다. 간단히 이야기하면 특정 엔티티를 변화시킬때 그에 따라 연관된 엔티티도 같이 상태가 변한다는 의미이다. 2. CasCade Type? 총 6가지의 Type을 가지며 각각에 대한 설명은 다음과 같습니다. CascadeType.All : 상위 엔티티에서 하위 엔티티로 모든 작업을 전파 CascadeType.PERSIST : 엔티티를 영속화할 때, 연관된 엔티티도 영속화 CascadeType.MERGE : 엔티티 상태를 병합 시 연관된 엔티티도 모두 병합 CascadeType.REMOVE : 엔티티를 제거 시 연관된 엔티티도 모두 제거 CascadeType.DETACH : 엔티티를 준영속화 할때, 연관된 엔티티도 모두 준영속화 CascadeTyp..
1.OSIV란? OSIV는 Open Session In View의 줄임말로써 영속성 컨텍스트를 view까지 열어두는 기능이다. 영속성 컨텍스트가 유지된다면 엔티티도 영속 상태로 유지되고 view까지 영속성 컨텍스트가 유지된다면 지연 로딩을 사용할 수 있다. 쉽게 이야기 하면 view에 가서도 엔티티 호출하여 데이터를 불러올 수 있다는 말이다. Spring JPA에서 OSIV는 디폴드 값이 true 이며 설정 변경을 통해 on/off 가능하다. 2. OSIV ON 기본적으로 JPA가 DB 컨넥션을 가져오는 시점은 @Transactional 어노테이션이 추가된 메소드가 실행될 때 DB 컨넥션을 가져오게 된다.(일반적으로 Service영역) 그렇다면 DB에 컨넥션을 반환하는 시점은 언제일까? 일반적으로 Tra..
1. N+1 문제란? 예를 들면 주문(Orders)과 주문정보(Order_item) 2개의 1:N의 구조의 엔티티가 있다고 가정하자. 주문과 주문정보를 전체 데이터를 조회할때 일반적으로 join문을 사용하여 한번의 쿼리를 통해 데이터를 조회할 수 있다. 그러나 JPA에서는 1번 조회되어야 할게 각각 N번을 추가로 조회하게 되어 총 N+1을 DB에서 조회하게 되는 문제가 발생하게 되는데 이러한 문제를 'N+1 문제'라고 말합니다. N+1 문제는 N:1 , 1:N을 가진 엔티티를 조회할 때 발생하게 됩니다. 2. N+1 문제가 발생하는 경우 - EAGER Loading Fetch type을 EAGER 전략으로 하였을 경우에 N+1문제가 발생한다. 예를 통해 설명을 하면 다음과 같다. 주문(orders) 엔티..
1. 즉시로딩 엔티티를 조회할 때 연관된 엔티티도 함께 조회. 예를 들어 회원 엔티티와 팀 엔티티가 연관이 있는 경우 em.find(Member.class, "member1")를 호출하면 회원 엔티티와 팀 엔티티가 함께 조회된다. 즉시로딩을 사용하기 위해서는 @ManyToOne의 fetch 속성을 FetchType.EAGER로 지정합니다. 아래와 같이 Order 엔티티와 Member 엔티티가 조인쿼리를 사용하여 함께 조회된다. JPA 조인 전략 내부조인(Inner Join)이 아닌 외부조인(Outer Join)이 사용된다. 왜냐하면 JoinColoumn으로 선언된 데이터가 Null 인 경우가 있을 수 있기 때문입니다. Null인 경우 Order 정보도 조회할 수 없습니다. 만약 내부조인을 사용하고 싶은 ..
야뤼송
'분류 전체보기' 카테고리의 글 목록 (11 Page)