Проблема наследования JPA: Ограничение иностранного ключа не выполняется для детской таблицыJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема наследования JPA: Ограничение иностранного ключа не выполняется для детской таблицы

Сообщение Anonymous »

Я использую JPA с стратегией наследования таблицы на класс (соединено наследством), и я сталкиваюсь с проблемой ограничения иностранного ключа при сохранении сущности. Ниже приведены подробную информацию о проблеме: < /p>
объекты: < /p>

Код: Выделить всё

Connector
- базовая сущность. SinglePageConnector и DualPageConnector Extend Connector и хранятся в отдельных таблицах (

Код: Выделить всё

singlepage_connector
, dualpage_connector ). У меня есть объект userconnector , который ссылается на Connector через внешнюю клавишу (connector_id).
create table connector
(
id varchar(36) not null,
name varchar(255) not null,
login_page_url varchar(255),
primary key (id)
);
< /code>
create table singlepage_connector
(
id varchar(36) not null,
connector_id varchar(36) not null,
primary key (id),
foreign key (connector_id) references connector(id)
);
< /code>
create table dualpage_connector
(
id varchar(36) not null,
connector_id varchar(36) not null,
next_button_selector varchar(36),
primary key (id),
foreign key (connector_id) references connector(id)
);
< /code>
create table user_connector
(
id varchar(36) not null,
user_id varchar(36) not null,
connector_id varchar(36) not null,
username varchar(255) not null,
PRIMARY KEY (id),
CONSTRAINT unique_user_connector UNIQUE (user_id, connector_id),
FOREIGN KEY (connector_id) references connector (id)
)
< /code>
код объекта JPA < /h2>
@Entity
public class Connector {
@OneToMany(mappedBy = "connector")
private Set userSwaConnectors;
}

@Entity
public class SinglePageConnector extends Connector { ... }

@Entity
public class DualPageConnector extends Connector { ... }

@Entity
public class UserConnector {
@ManyToOne
@JoinColumn(name = "connector_id", referencedColumnName = "id")
private Connector connector;
...
}
< /code>
проблема < /h3>
, когда я пытаюсь сохранить userconnector -Верд ">UserConnector connector = UserConnector.builder()
.username(command.getConnectorUsername())
.userId(command.getUserId())
.connector(connector)
.build();

userSwaConnectorRepository.save(connector);
< /code>
Я столкнулся с следующей ошибкой: < /p>

не может добавить или обновить строку ребенка: ограничение иностранного ключа не удается (авторизация .USER_CONNECTOR, ограничение USER_CONNECTOR_IBFK_1 Foreign Key (CONNECTOR_ID) Ссылки Connector (ID)) < /p>
< /blockquote>
Ошибка происходит из -за того, что JPA пытается вставить ссылку на внешний ключ (connector_id ) в родительскую таблицу разъемов, но фактические данные находятся в одной из дочерних таблиц (SinglePage_Connector или DualPage_Connector). Поскольку разъем Userconnecter ссылается на разъем, который является абстрактным базовым классом, JPA неправильно ищет в детских таблицах для иностранного ключа. < /P>
Что я хочу сделать: < /p>
Я хочу, чтобы JPA искал connector_id в соответствующей дочерней таблице (SinglePage_Connector или DualPage_Connector) вместо таблицы родительских соединителей, поскольку фактические данные хранятся в этих дочерних таблицах. < /p>
Как я могу настроить JPA для правильной обработки этого отношения иностранного ключа, учитывая, что фактические данные находятся в детских таблицах?


Подробнее здесь: https://stackoverflow.com/questions/794 ... hild-table
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»