私のエンティティ:
@Entity
public class User implements Serializable {
@OneToMany(orphanRemoval=true,cascade=CascadeType.ALL)
@JoinColumn(name="_user_id")
@MapKey(name="quest")
private Map<String, ActiveQuest> activeQuests = Maps.createHash();
...
@Entity
@Table(uniqueConstraints=@UniqueConstraint(columnNames={"_user_id","quest"}))
public class ActiveQuest implements Serializable {
@ManyToOne(optional=false)
@JoinColumn(name="_user_id")
private User user;
@Column(nullable=false,updatable=false,length=50)
private String quest;
...
のドキュメントに@MapKey
は次のように書かれています:
主キー以外の永続的なフィールドまたはプロパティがマップ キーとして使用される場合、一意性制約が関連付けられていることが期待されます。
ただし、ご覧のとおり、 の列quest
には一意の制約はありませんActiveQuest
が、組み合わせには一意の制約があります_user_id, quest
。
この使い方は正しいですか?うまく機能しているように見えますが、それは設計によるものですか、それとも単なる偶然ですか?