Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MapKey对一个关系是否唯一?_Java_Hibernate_Jpa - Fatal编程技术网

Java MapKey对一个关系是否唯一?

Java MapKey对一个关系是否唯一?,java,hibernate,jpa,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
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;

    ...
@实体
公共类用户实现可序列化{
@OneToMany(孤立删除=true,级联=CascadeType.ALL)
@JoinColumn(name=“\u user\u id”)
@MapKey(name=“quest”)
私有映射activeQuests=Maps.createHash();
...
@实体
@表(uniqueConstraints=@UniqueConstraint(columnNames={“\u user\u id”,“quest”}))
公共类ActiveQuest实现可序列化{
@多通(可选=假)
@JoinColumn(name=“\u user\u id”)
私人用户;
@列(null=false,updateable=false,length=50)
私人字符串搜索;
...
@MapKey
的文档说明:

如果使用主键以外的持久字段或属性 作为映射键,它应该具有唯一性约束 与之相关的

但是,正如您所看到的,在
ActiveQuest
quest
列上没有唯一的约束,但是在组合
\u user\u id,quest
上有一个约束


这个用法正确吗?它似乎很有效,但这是出于设计还是巧合?

我认为这看起来很好-你确实有一个与之相关的“唯一性约束”,因为你以用户id加入,并使用quest作为键,而用户id+quest是唯一的…

我认为这看起来很好-你确实有一个“唯一性约束”与之相关,因为您加入用户id并使用quest作为密钥,并且用户id+quest是唯一的…

我认为Bart所做的很好,我认为您的分析是正确的,我认为这是11.1.27中的JPA2规范MapKey javadoc.FWIW中的一个缺陷如果使用[目标实体]主键以外的持久字段或属性作为映射键,则该字段或属性在关系上下文中应该是唯一的",我认为这与Matt所说的更加吻合。好吧。我担心在获取时可能会遗漏
\u user\u id
,因为根据
MapKey
文档,它应该只能使用
quest
。我认为Bart所做的很好,我认为你的分析是正确的,我认为这是11.1.27中JPA2规范MapKey javadoc.FWIW中的一个缺陷,该规范称“如果[目标实体]主键以外的持久字段或属性用作映射键,则该字段或属性在关系上下文中应该是唯一的”,我认为这更符合Matt所说的。那么好吧。我担心在获取时可能会遗漏
\u用户id
,因为根据
MapKey
文档,它应该只能使用
quest