エンティティ オブジェクトが MapKey を持つ Map コレクションを同じテーブルの列として持つ必要があるという要件があります。エンティティ オブジェクト Fund は、関連する Funds を持つことができ、各 Fund は一意の Fund タイプを持ちます。FundType が列挙型クラスである Map として、関連する資金が必要です。Hibernate は relatedFunds をテーブルに保持していません。親ファンドのみが挿入されます。同じエンティティオブジェクトを次に示します。
@Entity
@Table(name="T_FUND")
public class Fund {
@Id
@GeneratedValue
protected Long id;
@Column(name="FUND_TYPE", nullable = false)
@Enumerated(EnumType.STRING)
protected FundType fundType;
@OneToMany(mappedBy="mainFund", cascade = {CascadeType.ALL})
@MapKey(name="fundType")
protected Map<FundType,Fund> relatedFunds;
@ManyToOne(targetEntity = FundImpl.class,cascade = {CascadeType.ALL})
protected Fund mainFund;
@Column(name="FULL_NAME", nullable = false, length = 255)
protected String fullName;
}