값 타입을 컬렉션에 담아 사용하는 것

엔티티를 일대다 같은 식으로 사용했었는데 이런식으로 값을 넣어 사용한다.

@Entity
public class Member {

	@Id @GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	private String username;

	@Embedded
	private Period workPeriod;

	@Embedded
	private Address homeAddress;

	@ElementCollection
	@CollectionTable(name = "favorite_food", joinColumns = @JoinColumn(name = "member_id"))
	@Column(name = "food_name")
	private Set<String> favoriteFoods = new HashSet<>();

	@ElementCollection
	@CollectionTable(name = "address", joinColumns = @JoinColumn(name = "member_id"))
	private List<Address> addressHistory = new ArrayList<>();

	// ...
}

저장

Member member = new Member();
member.setUsername("m1");
member.setHomeAddress(new Address("home_city", "home_street1", "home_zipcode"));

member.getFavoriteFoods().add("피자");
member.getFavoriteFoods().add("족발");
member.getFavoriteFoods().add("치킨");

member.getAddressHistory().add(new Address("city2", "street2", "zipcode2"));
member.getAddressHistory().add(new Address("city3", "street3", "zipcode3"));

em.persist(member);