✨ 스프링 벡엔드에 있어서 연관 관계와 관계형 데이터베이스를 정리하여 프로그래밍을 하는 것이 유지보소, 접근성, 보안 측면에서 좋다. 해당 설정에 대해 정리해보자!
관계형 데이터베이스에서는 1:1, 1:N(N:1), M:N 의 관계를 이용해서 데이터가 서로 간에 어떤 관계를 가지고 있는지 표현
*이 때 Primary Key 와 Foreign Key를 이용해서 관계를 설정
JPA에서는 어노테이션 과 방향성을 이용해서 표현하게 되는데 데이터베이스에서는 방향성의 개념이 없습니다.
1:1 -> @OneToOne
1:N -> @OneToMany
N:1 -> @ManyToOne
N:M -> @ManyToMany
=>방향성은 단방향 과 양방향이 있습니다.
회원 과 게시글의 관계
-한 명의 회원은 여러 개의 게시글을 작성할 수 있고 하나의 게시글은 한 명의 회원이 작성해야 합니다.
-관계형 데이터베이스에서는 회원의 기본키를 게시글의 외래키로 추가해야 합니다.
JPA에서는 회원의 기본키에 @OneToMany를 설정해도 되고 게시글 쪽의 외래키에 @ManyToOne을 설정해도 됩니다.
회원 과 상품의 관계
한 명의 회원은 여러 개의 다른 상품을 구매할 수 있습니다.
동일한 상품을 여러 명의 회원이 구매할 수 있습니다.
데이터베이스에서는 별도의 테이블을 만들어서 각 테이블의 기본키를 새로 만든 테이블의 외래키로 추가합니다.
JPA에서는 @ManyToMany로 설정은 가능하지만 @OneToMany 나 @ManyToOne 2개로 분할해서 설정
=>PERSIST - 부모 Entity 가 저장될 때 자식 Entity도 같이 저장
=>MERGE - 부모 Entity 가 병합될 때 자식 Entity도 같이 병합
=>REMOVE - 부모 Entity 가 삭제될 때 자식 Entity도 같이 삭제
=>REFRESH - 부모 Entity 가 refresh 될 때 자식 Entity도 같이 refresh
=>DETACH - 부모 Entity 가 detach 될 때 자식 Entity도 같이 detach
=>ALL - 부모 Entity의 모든 변화가 자식 Entity에 전파
=>고아 객체를 삭제해주는 옵션
=>Primary Key 값이 NULL 인 데이터가 고아 객체(orphanRemoval): Entity 는 데이터베이스에 있었던 데이터이지만 실제로는 메모리에 존재하는 데이터
=>관련있는 Entity를 가져오는 시점을 설정하는 것인데 Eagar(바로 가져오기) 와 Lazy(지연)가 있음