Проблема при создании нескольких внешних ключей на составном первичном ключе с использованием JPA - PullRequest
1 голос
/ 25 марта 2020

У меня есть такая структура таблицы:

Структура таблицы

Зависимости являются однонаправленными.

Мои классы POJO выглядят так:

class T1 {

@EmbeddedId T1PK t1Pk;

String c13;
// getter setter
}

@Embeddable
class T1PK {

String c11;
String c12;

// getter setters hashCode equals
}

class T3 {
@Id String T31
String T32

// getter setter
}

@Embeddable
class T2PK {

T1PK t1Pk;
String c31;

// getter setters hashCode equals
}

class T2 {

@EmbeddedId T2PK t2Pk;

@MapsId("c31")
@JoinColumn(name = "c31", referencedColumnName = "c31", foreignKey = @ForeignKey(name = "FK_32"))
@OneToOne
private T3 t3;

@MapsId("t1Pk")
@JoinColumns(foreignKey = @ForeignKey(name = "FK_12"), value = {
            @JoinColumn(name = "c11", referencedColumnName = "c11"),
            @JoinColumn(name = "c12", referencedColumnName = "c12") })
@OneToOne
private T1 t1;

// getter setter

}

Когда я запускаю мое приложение для весенней загрузки, встречается следующая ошибка

Foreign key (FKakdpaxm8kl8mv0ld210dg7mcw:t2 [c11,c12,c31])) must have same number of columns as the referenced primary key (t3 [t31])

Однако, если я просто закомментирую зависимость какой-либо одной таблицы, t3 или t1. Создается правильный внешний ключ с указанным именем FK.

1 Ответ

0 голосов
/ 25 марта 2020

Я не смог попробовать это, но T2PK не должен содержать ссылку на T1PK, а скорее отношение @OneToOne к T1, которое в настоящее время находится в T2.

* 1007. *
class T2 {

    @EmbeddedId
    T2PK t2Pk;

    @MapsId("c31")
    @JoinColumn(name = "c31", referencedColumnName = "c31", foreignKey = @ForeignKey(name = "FK_32"))
    @OneToOne
    private T3 t3;
}

Редактировать: Также возможно, что вы можете поместить @OneToOne в T1 в T2 и использовать @MapsId без значения или @MapsId("t1") для отображения всего T1 объект в ваш T2PK, но я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...