Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 使用';它在一个表中不是唯一的_Hibernate_Jpa - Fatal编程技术网

Hibernate 使用';它在一个表中不是唯一的

Hibernate 使用';它在一个表中不是唯一的,hibernate,jpa,Hibernate,Jpa,这是一个Hibernate/JPA问题 我有一组Schedule对象,每个对象包括多个Steps不同的StepTypes。每个StepType在计划中都是唯一的,因此这些步骤存储为映射。代码注释为: @Entity public class Schedule implements Serializable { @MapKey(name="type") @OneToMany(cascade=CascadeType.ALL, mappedBy="schedule") priv

这是一个Hibernate/JPA问题

我有一组
Schedule
对象,每个对象包括多个
Step
s不同的
StepType
s。每个
StepType
在计划中都是唯一的,因此这些步骤存储为
映射
。代码注释为:

@Entity
public class Schedule implements Serializable {
    @MapKey(name="type")
    @OneToMany(cascade=CascadeType.ALL, mappedBy="schedule")
    private Map<StepType, Step> steps;
}

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"schedule", "type"})})
public class Step implements Serializable {
    @ManyToOne
    private StepType type;

    @ManyToOne
    private Schedule schedule;
}
@实体
公共类调度实现了可序列化{
@映射键(name=“type”)
@OneToMany(cascade=CascadeType.ALL,mappedBy=“schedule”)
私有映射步骤;
}
@实体
@表(uniqueConstraints={@UniqueConstraint(columnNames={“schedule”,“type”})})
公共类步骤实现可序列化{
@许多酮
私有阶梯型;
@许多酮
私人时间表;
}
不幸的是,这显然是不允许的。A需要具有与之关联的唯一性约束,而
类型
没有,因为步骤类型仅在特定计划中是唯一的


有没有更好的方法来注释这个结构,或者为了Hibernate,我必须重新考虑对象模型?或者这种违反行为应该是无害的?(地图拒绝正确加载,但我无法确定这是为什么。)

根据规范,您是对的,唯一性是必需的。但在我(和你)看来,只要求“本地化的独特性”似乎是合乎逻辑的。 我刚刚发现“Pro JPA 2”一书中的表述是相同的:“不需要在这个实体类型的整个域中都是唯一的。它只需要在关系的范围内是唯一的”

我需要和你一样的行为。我将很快测试代码

以下是本书摘录的链接:

我也有同样的问题。这个方法对你有用吗?