Spring Model/03. 연관관계 처리
-
이번 시간에는 CASCADE 옵션을 이용한 영속성 전이와 고아객체의 관리에 대해 살펴보자. Cascade 옵션을 이용한 영속성 전이 영속성 전이?영속성 전이란 특정 entity의 영속 상태를 변경할 때 연된된 entity의 영속 상태도 함께 변경하는 것을 의미한다. 앞서 살펴봤던 Attachment, Post, Member의 관계를 생각해보자.ERD를 살펴보면 Attachment는 Post의 P.K인 pno를 post로 참조하고 있다. 따라서 DB 입장에서 Attachment에 데이터를 저장하려면 먼저 Post에 데이터가 있어야 한다. 또한 Post를 삭제하기 위해서 먼저 Attachment에서 대상 Post를 참조하는 데이터를 먼저 지워야 한다. 이에 따라 관련 동작을 위해서는 아래와 같이 장황한 코드..
06. 연관 관계의 관리 - 영속성 전이와 고아객체 관리이번 시간에는 CASCADE 옵션을 이용한 영속성 전이와 고아객체의 관리에 대해 살펴보자. Cascade 옵션을 이용한 영속성 전이 영속성 전이?영속성 전이란 특정 entity의 영속 상태를 변경할 때 연된된 entity의 영속 상태도 함께 변경하는 것을 의미한다. 앞서 살펴봤던 Attachment, Post, Member의 관계를 생각해보자.ERD를 살펴보면 Attachment는 Post의 P.K인 pno를 post로 참조하고 있다. 따라서 DB 입장에서 Attachment에 데이터를 저장하려면 먼저 Post에 데이터가 있어야 한다. 또한 Post를 삭제하기 위해서 먼저 Attachment에서 대상 Post를 참조하는 데이터를 먼저 지워야 한다. 이에 따라 관련 동작을 위해서는 아래와 같이 장황한 코드..
2020.06.06 -
이번 시간에는 관계를 나타내는 애너테이선들이 공통적으로 가지는 fetch 속성을 살펴보자. 관계에 따른 로딩 시점 결정 관계 설정과 fetch 속성fetch는 DB에서 연관관계 엔티티를 실제로 조회해서 가져오는 것 즉 select 시점을 결정하는 속성으로 FetchType이라는 enum 타입으로 선언되어있다.fetch 속성내용기본 적용FetchType.EAGER(열렬한)즉시 로딩 - 엔티티 조회 시 join을 이용해 연관 관계 엔티티까지 한번에 조회, 영속화 - 연관된 엔티티가 하나인 경우(가져올게 적다) - @ManyToOne, @OneToOneFetchType.LAZY(게으른)지연 로딩 - 엔티티 조회 시 대상 엔티티만 조회, 연관 관계 엔티티는 조회하지 않음 - 연관 관계 엔티티는 필요한(사용하는..
05. 연관 관계 관리 - fetch 속성이번 시간에는 관계를 나타내는 애너테이선들이 공통적으로 가지는 fetch 속성을 살펴보자. 관계에 따른 로딩 시점 결정 관계 설정과 fetch 속성fetch는 DB에서 연관관계 엔티티를 실제로 조회해서 가져오는 것 즉 select 시점을 결정하는 속성으로 FetchType이라는 enum 타입으로 선언되어있다.fetch 속성내용기본 적용FetchType.EAGER(열렬한)즉시 로딩 - 엔티티 조회 시 join을 이용해 연관 관계 엔티티까지 한번에 조회, 영속화 - 연관된 엔티티가 하나인 경우(가져올게 적다) - @ManyToOne, @OneToOneFetchType.LAZY(게으른)지연 로딩 - 엔티티 조회 시 대상 엔티티만 조회, 연관 관계 엔티티는 조회하지 않음 - 연관 관계 엔티티는 필요한(사용하는..
2020.06.05 -
이번 시간에는 M:N 관계의 처리에 대해 살펴보자. M:N의 관계 처리 M:N의 관계M:N 관계는 양측 모두가 여러 개의 관계를 가지는 경우이다. 예를 들어 게시글과 카테고리를 생각해보면 게시글 하나가 여러 카테고리에 속해있을 수 있고 하나의 카테고리에는 여러 개의 게시글이 있을 수 있다.일반적으로 DB에서는 이런 상황을 처리하기 위해 중간에 연계 테이블을 만들어서 N:1 관계로 풀어서 처리하는 것이 일반적이다.https://goodteacher.tistory.com/466/#comment18561464 [DB] 다대다 관계의 문제점과 해결이번 포스트에서는 다대다 관계의 문제점과 해결 방법에 대해서 살펴보자. 다대다 관계다대다 관계의 예DB 모델링 과정에서 다대다 관계가 나올 수 있다. 쉽게 생각할 ..
04. 연관 관계 - M:N 관계이번 시간에는 M:N 관계의 처리에 대해 살펴보자. M:N의 관계 처리 M:N의 관계M:N 관계는 양측 모두가 여러 개의 관계를 가지는 경우이다. 예를 들어 게시글과 카테고리를 생각해보면 게시글 하나가 여러 카테고리에 속해있을 수 있고 하나의 카테고리에는 여러 개의 게시글이 있을 수 있다.일반적으로 DB에서는 이런 상황을 처리하기 위해 중간에 연계 테이블을 만들어서 N:1 관계로 풀어서 처리하는 것이 일반적이다.https://goodteacher.tistory.com/466/#comment18561464 [DB] 다대다 관계의 문제점과 해결이번 포스트에서는 다대다 관계의 문제점과 해결 방법에 대해서 살펴보자. 다대다 관계다대다 관계의 예DB 모델링 과정에서 다대다 관계가 나올 수 있다. 쉽게 생각할 ..
2020.06.04 -
이번 시간에는 1:1 연관관계 처리에 대해 살펴보자.1:1 연관관계 처리 1:1 연관관계여기서는 Post와 Attachment의 관계를 다룬다. 우리 시나리오에서는 게시글 하나에 첨부파일은 하나만 가능하다고 하자. 따라서 Post와 Attachment는 1:1의 관계가 된다. 1:1 관계의 특징과 처리 방법을 살펴보자.일반적으로 DB에서 1:1 관계를 처리하기 위해서는 보조테이블(Attachment)에 F.K를 설정하고 관계의 소유자로 만든다. 보조테이블(Attachment)에는 데이터가 없을 수 있지만 주테이블(Post)에는 데이터가 없을 수 있기 때문이다. 아무튼 F.K를 이용하면 join을 이용해서 서로를 탐색할 수 있다.JPA에서는 @OneToOne을 이용해서 1:1 관계를 처리한다. @OneTo..
03. 연관 관계 - 1:1 관계이번 시간에는 1:1 연관관계 처리에 대해 살펴보자.1:1 연관관계 처리 1:1 연관관계여기서는 Post와 Attachment의 관계를 다룬다. 우리 시나리오에서는 게시글 하나에 첨부파일은 하나만 가능하다고 하자. 따라서 Post와 Attachment는 1:1의 관계가 된다. 1:1 관계의 특징과 처리 방법을 살펴보자.일반적으로 DB에서 1:1 관계를 처리하기 위해서는 보조테이블(Attachment)에 F.K를 설정하고 관계의 소유자로 만든다. 보조테이블(Attachment)에는 데이터가 없을 수 있지만 주테이블(Post)에는 데이터가 없을 수 있기 때문이다. 아무튼 F.K를 이용하면 join을 이용해서 서로를 탐색할 수 있다.JPA에서는 @OneToOne을 이용해서 1:1 관계를 처리한다. @OneTo..
2020.06.04 -
이번 시간에는 N:1 양방향 관계에 대해 살펴보자.N:1의 양방향관계 매핑 @OneToMany앞서 살펴봤던 @ManyToOne은 N:1의 단방향 관계만 처리 가능할 뿐 양방향으로는 처리할 수가 없었다. DB 처럼 양방향 처리를 위해서는 어떤것이 추가로 필요할까?N:1의 반대 방향인 1:N을 설정하기 위해서는 @OneToMany를 사용한다.@Target({METHOD, FIELD})public @interface OneToMany { String mappedBy() default ""; // 관계를 소유한 객체의 필드 CascadeType[] cascade() default {}; // 연관객체에 대한 동시 처리 설정 FetchType fetch() ..
02. 연관 관계 - N:1 양방향 관계 처리이번 시간에는 N:1 양방향 관계에 대해 살펴보자.N:1의 양방향관계 매핑 @OneToMany앞서 살펴봤던 @ManyToOne은 N:1의 단방향 관계만 처리 가능할 뿐 양방향으로는 처리할 수가 없었다. DB 처럼 양방향 처리를 위해서는 어떤것이 추가로 필요할까?N:1의 반대 방향인 1:N을 설정하기 위해서는 @OneToMany를 사용한다.@Target({METHOD, FIELD})public @interface OneToMany { String mappedBy() default ""; // 관계를 소유한 객체의 필드 CascadeType[] cascade() default {}; // 연관객체에 대한 동시 처리 설정 FetchType fetch() ..
2020.06.04 -
JPA는 OR Mapping을 기반으로 동작한다. JPA에는 자바 객체와 DB의 테이블을 연결하기 위한 많은 장치들이 있는데 객체와 테이블의 차이를 잘 이해하지 못하고 사용하면 전~혀 생각하지 못했던 SQL이 동작하면서 우리의 프로젝트를 망가트린다.지난 시간까지는 하나의 테이블을 어떻게 엔티티로 표현할 수 있는지 살펴봤는데 이번 시간에는 테이블의 연관관계를 어떻게 객체의 관계로 표현할 수 있는지, 주의해야 할 내용은 뭐가 있는지 살펴보자.그 둘은 다르다!! 관계 구성 방식먼저 DB를 구성하는 테이블이 관계를 맺기 위해서는 Foreign Key(이하 F.K)를 이용한다. 이때 F.K를 설정한 테이블은 관계의 소유자가 된다. Post와 Reply의 관계에서는 Reply 테이블에 F.K 제약사항을 설정하며 R..
01. 연관 관계 - N:1 단방향 관계 처리JPA는 OR Mapping을 기반으로 동작한다. JPA에는 자바 객체와 DB의 테이블을 연결하기 위한 많은 장치들이 있는데 객체와 테이블의 차이를 잘 이해하지 못하고 사용하면 전~혀 생각하지 못했던 SQL이 동작하면서 우리의 프로젝트를 망가트린다.지난 시간까지는 하나의 테이블을 어떻게 엔티티로 표현할 수 있는지 살펴봤는데 이번 시간에는 테이블의 연관관계를 어떻게 객체의 관계로 표현할 수 있는지, 주의해야 할 내용은 뭐가 있는지 살펴보자.그 둘은 다르다!! 관계 구성 방식먼저 DB를 구성하는 테이블이 관계를 맺기 위해서는 Foreign Key(이하 F.K)를 이용한다. 이때 F.K를 설정한 테이블은 관계의 소유자가 된다. Post와 Reply의 관계에서는 Reply 테이블에 F.K 제약사항을 설정하며 R..
2020.06.03