1

我的实体:

@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说:

如果将主键以外的持久字段或属性用作映射键,则预计它具有与之关联的唯一性约束。

但是,如您所见, 的列没有唯一约束questActiveQuest但组合 有一个_user_id, quest

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

4

1 回答 1

1

我认为这看起来不错 - 你确实有一个与之相关的“唯一性约束”,因为你加入了 user_id 并使用 quest 作为键,并且 user_id+quest 是唯一的......

于 2012-07-13T09:20:32.277 回答