1

現在、プロジェクトに EclipseLink 2.5 を使用していますが、ManyToMany 関係で小さな問題が発生しました。

Identifiable複合キー (uuid、リビジョン) を定義するマップされたスーパークラスがあります。Entity クラスAppointmentとの両方Contentが のサブクラスですIdentifiable

Appointmentからへの一方向の ManyToMany リレーションを定義しようとしましたContentが、EclipseLink が JoinTable を正しく作成していないようです。その中には 2 つの列 (uuid、リビジョン) しかありませんが、4 つあるはずです (関係の両側に 1 つの 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の代わりに も使用しようとしましたが、EclipseLinkは、複合キーを持つターゲット エンティティに必要な、@JoinColumnsそれぞれ不完全なアノテーションが欠落していると不平を言います。@JoinColumns

私は何か間違ったことをしていますか?

こんにちは、チャート

4

1 に答える 1

1

ManyToMany の場合、@JoinTable を @JoinColumns に使用する必要があります。ソースとターゲットの結合列は @JoinTable 内で指定されます。

あなたの @JoinColumn には「更新可能 = false、挿入可能 = false」があってはなりません。これは意味がありません。そうすると、何も挿入できなくなり、何が起こっているように見えます。

https://en.wikibooks.org/wiki/Java_Persistence/ManyToManyを参照して ください。

于 2013-09-04T13:27:03.917 に答える