我的实体:
@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
的{{1}}列没有唯一约束,但组合ActiveQuest
上有一个。
这种用法是否正确?它似乎运作良好,但这是设计还是巧合?
答案 0 :(得分:1)
我认为看起来很好 - 你实际上有一个与它相关联的“唯一性约束”,因为你加入了user_id并使用quest作为键,而user_id + quest是唯一的......