오늘 공부한 것
* Spring 숙련주차 2주차 강의 듣기
오늘은 열심히 숙련주차 2주차 강의를 들었다그리고 Lv2 과제 코드 리뷰도 했다
N 대 1 관계 @ManyToOne 애너테이션 사용 음식 Entity와 고객 Entitiy가 N : 1 관계라 가정
1) 단방향 외래 키 주인만이 외래 키를등록, 수정, 삭제 하며 주인 아닌 쪽은 읽기만 가능
@JoinColumn()은 외래 키의 주인이 사용하는 애너테이션으로 컬럼명, null 여부, unique 여부 등
지정가능
2) 양방향 외래 키의 주인 지정시 외래 키의 주인이 아닌쪽에서 지정함 @OneToOne
(mappedBy = “외래키 주인인 상대 entity의 외래 키 필드명”)
여러개를 표현하기 위해 List를 사용함
@JoinColumn()은 외래 키의 주인이 사용하는 애너테이션으로 컬럼명, null 여부, unique 여부 등
지정가능
1 대 N 관계 @OneToOne 애너테이션 사용 음식 Entity와 고객 Entitiy가 1 : N 관계라 가정
1) 단방향 외래 키 주인만이 외래 키를등록, 수정, 삭제 하며 주인 아닌 쪽은 읽기만 가능
@JoinColumn()은 외래 키의 주인이 사용하는 애너테이션으로 컬럼명, null 여부, unique 여부 등
지정가능
여러개를 표현하기 위해 List를 사용함
외래 키를 관리하는 주인은 음식 Entity 지만 실제 외래 키는 고객 Entity가 가지고 있기 때문에
추가적인 UPDATE가 발생된다는 단점이 있다
2) 양방향 일반적으로 존재하지 않는다
N 관계의 Entity인 고객 Entity에서 @JoinColum의 insertable과 updatable 옵션을 false로 설정하여
양쪽으로 JOIN 설정하면 양방향처럼 설정은 가능
N 대 M 관계 @ManyToMany 애너테이션 사용 음식 Entity와 고객 Entitiy가 N : M 관계라 가정
1) 단방향 중간테이블을 생성해야함
2) 양방향 중간테이블을 생성해야함
반대 방향인 고객 Entity에 @ManyToMany로 음식 Entity를 연결하고 mappedby 옵션을 설정하여
외래 키의 주인을 설정
3) 중간테이블 직접 생성하여 관리하면 변경 발생 시 컨트롤하기 쉽기 때문에 확장성이 좋다
지연로딩과 즉시로딩 JPA는 연관관계가 설정된 Entity 정보를 바로 가져올지, 필요할 때 가져올지 정할 수 있는데 이것을 Fetch Type이라 부른다
1) 지연로딩 LAZY @OneToMany 애너테이션은 default 값이 LAZY로 지정됨
필요한 시점에 정보를 가지고 옴
@Transactional 기능이 반듯이 필요
2) 즉시로딩 EAGER @ManyToOne 애너테이션은 default 값이 EAGER로 지정됨
조회할 때 연관된 모든 Entity의 정보를 즉시 가지고 옴
영속성 전이 영속 상태의 Entity에서 수행되는 작업들이 연관된 Entity까지 전파되는 상황
해당 Entity를 저장할 때 연관된 Entity 까지 자동 저장을 위해서는 자동으로 저장하려고하는 연관된 Entity에 추가한 연관관계 애너테이션에 CASCADE의 PERSIST 옵션 설정해야함
orphanRemoval SQL의 데이터도 삭제함 @ManyToOne 같은 애너테이션에서는 사용 불가
'항해99' 카테고리의 다른 글
23.09.07 항해 99 16기 주특기 Spring 12일차 (0) | 2023.09.07 |
---|---|
23.09.05 항해 99 16기 주특기 Spring 10일차 (0) | 2023.09.05 |
23.08.28~09.03 항해 99 16기 3주차 회고록 (1) | 2023.09.03 |
23.09.02 항해 99 16기 주특기 Spring 8일차 (0) | 2023.09.02 |
23.09.01 항해 99 16기 주특기 Spring 7일차 (0) | 2023.09.01 |