다대다 관계의 경우 실무에서는 지양해야 하는 방식이라고 하지만, 그냥 사용하지 않는 것이 아니라 그 이유는 알고 있어야 하므로 다대다 관계에 대해서 정리 해보려고 한다. 샘플 코드는 가장 아래에 있는 링크를 참조하면 된다. 1. 객체와 테이블의 차이 객체 객체는 컬렉션을 사용해서 객체 두 개로 다대다 관계 가능하다. 관계형 DB 관계형 DB는 정규화된 테이블 두 개로 다대다 관계를 표현할 수 없다. 그러므로 연결 테이블을 추가해서 일대다 - 다대일 관계로 풀어내야 한다. 2. 단방향 @ManyToMany 어노테이션을 사용하여 다대다 관계를 매핑한다. 엔티티 예시 @JoinTable: 연결 테이블 지정 @Entity @Table(name = "ORDERS") @NoArgsConstructor(access ..
값 타입(value object) 컬렉션은 제약 사항이 존재해, 실무에서 잘못된 방식으로 사용할 수 있을 것으로 보여 공부한 내용을 샘플 코드와 함께 정리해두려고 한다. 테스트 코드는 쿼리 확인을 위한 용도로 assert 구문은 제외하였다. 1. 개요 값 타입을 하나 이상 저장하려면 컬렉션에 보관하고 @ElementCollection, @CollectionTable 어노테이션을 사용하면 된다. 단, 식별자가 없는 값 타입의 특성 상 제약사항이 존재하는데 이는 뒤에서 자세히 살펴볼 예정이다. 2. 어플리케이션 구성 entity 샘플 코드는 회원 객체가 여러 주소 이력(값 타입 컬렉션)을 가지고 있는 형태로 되어 있다. 값 타입 컬렉션을 사용하는 addressHistory에 @ElementCollection..