객체의 참조와 테이블의 FK를 매핑
다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N)
양방향 연관관계인 경우 주인을 정해야 함
객체 연관관계 | 테이블 연관관계 |
---|---|
서로 다른 단방향 관계 2개 | 양방향 관계 |
참조 | FK |
객체 그래프 탐색 | JOIN |
속성 | 기능 | 기본값 |
---|---|---|
name | 매핑할 FK 이름 | 필드명 + _ + 참조하는 테이블의 PK |
referencedColumnName | FK가 참조하는 대상 테이블의 컬럼명 | 참조하는 테이블의 PK 컬럼명 |
속성 | 기능 | 기본값 |
---|---|---|
optional | false이면 연관 엔티티가 항상 있어야 함 | true |
fetch | global fetch 전략 설정 | @ManyToOne=FetchType.EAGER @ManyToOne=FetchType.LAZY |
cascade | 영속전 전이 기능 사용 |
단방향 매핑만으로 테이블과 객체 간 매핑은 완료되었지만, 객체 그래프 탐색 기능을 위해 양방향 매핑을 추가할 수 있다.
mappedBy
구현 시 주의사항
이 방법으로는 연결 테이블의 추가 컬럼을 표현할 수 없어 실무에 적용하기는 어려움
속성 | 기능 |
---|---|
name | 연결테이블 지정 |
joinColumns | 현재 엔티티를 참조하는 FK |
inverseJoinColumns | 반대 방향 엔티티를 참조하는 FK |
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT",
joinColumns = @JoinColumn(name = "MEMBER_ID",
inverseColumns = @JoinColumn(name = "PRODUCT_ID"))
private List<Product> products = new ArrayList<Product>();
@IdClass
@EmbeddedId