본문 바로가기

항해99

23.09.04 항해 99 16기 주특기 Spring 9일차

오늘 공부한 것

* Spring 숙련주차 2주차 강의 듣기

 

오늘은 열심히 숙련주차 2주차 강의를 들었다그리고 Lv2 과제 코드 리뷰도 했다

 

N 1 관계 @ManyToOne 애너테이션 사용 음식 Entity와 고객 EntitiyN : 1 관계라 가정

                    1) 단방향 외래 키 주인만이 외래 키를등록, 수정, 삭제 하며 주인 아닌 쪽은 읽기만 가능

                                    @JoinColumn()은 외래 키의 주인이 사용하는 애너테이션으로 컬럼명, null 여부, unique 여부 등

                                    지정가능

                    2) 양방향 외래 키의 주인 지정시 외래 키의 주인이 아닌쪽에서 지정함 @OneToOne

                                     (mappedBy = “외래키 주인인 상대 entity의 외래 키 필드명”)

                                     여러개를 표현하기 위해 List를 사용함

                                     @JoinColumn()은 외래 키의 주인이 사용하는 애너테이션으로 컬럼명, null 여부, unique 여부 등

                                     지정가능

 

1 N 관계 @OneToOne 애너테이션 사용 음식 Entity와 고객 Entitiy1 : N 관계라 가정

                    1) 단방향 외래 키 주인만이 외래 키를등록, 수정, 삭제 하며 주인 아닌 쪽은 읽기만 가능

                                    @JoinColumn()은 외래 키의 주인이 사용하는 애너테이션으로 컬럼명, null 여부, unique 여부 등

                                    지정가능

                                    여러개를 표현하기 위해 List를 사용함

                                    외래 키를 관리하는 주인은 음식 Entity 지만 실제 외래 키는 고객 Entity가 가지고 있기 때문에

                                    추가적인 UPDATE가 발생된다는 단점이 있다

                     2) 양방향 일반적으로 존재하지 않는다

                                      N 관계의 Entity인 고객 Entity에서 @JoinColuminsertableupdatable 옵션을 false로 설정하여

                                      양쪽으로 JOIN 설정하면 양방향처럼 설정은 가능

 

N M 관계 @ManyToMany 애너테이션 사용 음식 Entity와 고객 EntitiyN : 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에                        추가한 연관관계 애너테이션에 CASCADEPERSIST 옵션 설정해야함

 

orphanRemoval SQL의 데이터도 삭제함 @ManyToOne 같은 애너테이션에서는 사용 불가