1

我目前正在为一个项目使用 EclipseLink 2.5,但遇到了一个多对多关系的小问题:

我有一个映射的超类Identifiable,它定义了一个复合键(uuid,修订版)。Entity 类AppointmentContent都是Identifiable.

现在我尝试从 to 定义一个单向的 ManyToMany 关系AppointmentContent但似乎 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

4

1 回答 1

1

对于ManyToMany,您必须使用@JoinTable 到@JoinColumns,源和目标连接列在@JoinTable 中指定。

你的@JoinColumn 不能有,“updatable = false, insertable = false”,这是没有意义的,因为那样它就不能插入任何东西,这似乎是正在发生的事情。

见, https://en.wikibooks.org/wiki/Java_Persistence/ManyToMany

于 2013-09-04T13:27:03.917 回答