1대다 관계 맵핑하기
단방향 맵핑하기
public class Bid {
@ManyToOne(targetEntity = chapter6.entityConllection.Item.class)
@JoinColumn(name = "ITEM_ID", nullable = false)
private Item item;
}
- Bid 테이블에 ITEM_ID라는 이름으로 Item 클래스의 주키값을 가지는 외례키 컬럼이 생긴다.
- @ManyToOne 애노테이션의 targetEntity 속성은 생략해도 된다.
- @JoinColumn은 생략하면, 기본으로 타겟 Entity 이름과 주키를 언더바로 합친 이름을 사용하지만, 어차피 nullable=false 설정하려면 명시적으로 표기해야 한다.
양방향 맵핑하기
@OneToMany(mappedBy = "item")
private Set<Bid> bids = new HashSet<Bid>();
public void add(Bid bid){
bid.setItem(this);
bids.add(bid);
}
- Convenient Mathod를 사용해서 양방향 관계의 객체가 서로 관계를 맺도록 한다.
- mappedBy는 XML에서 inverse 속성과 동일하다.
- inverse 속성을 사용하는 이유? 이걸 설정해 두지 않으면, 위의 add 메소드는 두 번의 SQL을
발생시킨다.(예제를 만들어서 확인해봤으나, 에러가 발생.) 그러나 inverse 속성을 설정하여, 둘 중 한 곳에서의 변화만
SQL로 반영하도록 설정한다.
- 위와 같이 설정한 경우 bids.add(bid); 이 메소드는 SQL을 발생시키지 않는다. bid.setItem(this); 이 메소드를 호출 할 때 SQL을 날린다.
- @ManyToOne 쪽에 inverse 속성은 없지만, 다른 방법으로 설정할 수 있다.(다음 챕터에서 다룸)