단방향 맵핑하기

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 속성은 없지만, 다른 방법으로 설정할 수 있다.(다음 챕터에서 다룸)