MapKey可以是一个关系的唯一吗?

时间:2012-07-13 08:53:49

标签: java hibernate jpa

我的实体:

@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上有一个。

这种用法是否正确?它似乎运作良好,但这是设计还是巧合?

1 个答案:

答案 0 :(得分:1)

我认为看起来很好 - 你实际上有一个与它相关联的“唯一性约束”,因为你加入了user_id并使用quest作为键,而user_id + quest是唯一的......