我目前正在为一个项目使用 EclipseLink 2.5,但遇到了一个多对多关系的小问题:
我有一个映射的超类Identifiable
,它定义了一个复合键(uuid,修订版)。Entity 类Appointment
和Content
都是Identifiable
.
现在我尝试从 to 定义一个单向的 ManyToMany 关系Appointment
,Content
但似乎 EclipseLink 没有创建 JoinTable 权利。其中只有两列(uuid,修订版),但应该有四列(关系的每一侧都有一个 uuid 和修订版)。
欲望但并非最不重要的,代码:
@MappedSuperclass
@IdClass(IdentifiablePK.class)
public abstract class Identifiable implements Serializable {
@Id
@UuidGenerator(name = "uuid")
@GeneratedValue(generator = "uuid")
protected String uuid;
@Id
protected Integer revision;
/* ... */
}
public class Appointment extends Identifiable {
@JoinColumns({
@JoinColumn(columnDefinition = "trainingcontent_uuid", referencedColumnName = "uuid", nullable = false, updatable = false, insertable = false),
@JoinColumn(columnDefinition = "trainingcontent_revision", referencedColumnName = "revision", nullable = false, updatable = false, insertable = false)
})
@ManyToMany(fetch = FetchType.LAZY)
protected List<TrainingContent> trainingContents;
/* ... */
}
public class TrainingContent extends Identifiable {
/* ... */
}
我也尝试使用@JoinTable
而不是@JoinColumns
,但随后 EclipseLink 抱怨缺少相应不完整的@JoinColumns
注释,这对于具有复合键的目标实体是必需的。
难道我做错了什么?
问候, chrert