Это вопрос Hibernate / JPA.
У меня есть набор Schedule
объектов, каждый из которых включает в себя несколько Step
s различных StepType
s. Каждый 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? Или это нарушение должно быть безвредным? (Карта отказывается загружаться правильно, но я не могу с уверенностью подтвердить, что именно поэтому.)