맵 맵핑하기
Entity를 참조하는 값
특징
- Map<Long, BId> 처럼, Bid의 주키값을 맵의 키값으로 가지는 콜렉션으로 맵핑할 수 있다.
- 애플리케이션에서만 다를 뿐, 테이블은 변한 거 없다. Bid에 ITEM_ID 외례키 컬럼이 생긴다.
맵핑하기
Item.java
@MapKey(name = "id")
@OneToMany(mappedBy="item")
private Map<Long, Bid> bids = new HashMap<Long, Bid>();
Bid.java
@ManyToOne
private Item item;
ternary association
특징
- 3항 연관을 맵을 사용해서 표현할 수 있다.
- Category, Item, User의 관계에서 Category가 Item을 키, User을 값으로 가지는
콜렉션을 가지도록 설정할 수 있다. 왜? Category에 속하는 Item은 유일하고, User는 여러 개의 Item을 추가할
수 있으니까.
맵핑하기
Category.java
@ManyToMany
@MapKeyManyToMany(joinColumns = @JoinColumn(name = "ITEM_ID"))
@JoinTable(name = "CATEGORY_ITEM", joinColumns = @JoinColumn(name = "CATEGORY_ID"), inverseJoinColumns = @JoinColumn(name = "USER_ID"))
private Map<Item, User> itemsAndUser = new HashMap<Item, User>();
- CATEGORY_ITEM 테이블을 만들고, 이 테이블의 주키를 CATEGORY_ID로 설정한다.
- 맵의 키는 ITEM_ID, 값은 USER_ID로 맵핑된다.