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は次のように書かれています:

主キー以外の永続的なフィールドまたはプロパティがマップ キーとして使用される場合、一意性制約が関連付けられていることが期待されます。

ただし、ご覧のとおり、 の列questには一意の制約はありませんActiveQuestが、組み合わせには一意の制約があります_user_id, quest

この使い方は正しいですか?うまく機能しているように見えますが、それは設計によるものですか、それとも単なる偶然ですか?

4

1 に答える 1

1

私はそれがうまくいくと思います.user_idに参加し、questをキーとして使用しているため、実際には「一意性制約」が関連付けられており、user_id + questは一意です...

于 2012-07-13T09:20:32.277 に答える