这是一个Hibernate / JPA问题。
我有一组Schedule
个对象,每个对象包含多个Step
个StepType
个。每个StepType
在计划中都是唯一的,因此步骤存储为Map<StepType, Step>
。代码注释为:
@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;
}
不幸的是,这显然是不允许的。 MapKey需要具有与之关联的唯一性约束,而type
则不会,因为步骤类型在特定计划中仅是唯一的。
有没有更好的方法来注释这个结构,还是我不得不重新考虑Hibernate的对象模型呢?或者这种违规行为是否无害? (地图拒绝正确加载,但我无法确认这就是原因。)
答案 0 :(得分:0)
根据规范,你是对的,需要唯一性。但根据我(和你)的说法,只需要“本地化的唯一性”似乎是合乎逻辑的。 我刚刚发现“Pro JPA 2”书中也有相同的说法:“不要求在这个实体类型的整个域中都是唯一的。它只需要在关系范围内是唯一的。”
我需要与你完全相同的行为。我很快就会测试代码。