Hibernate OneToOne с дочерним объектом CascadeType.ALL не может быть создан одновременно с родительским объектом.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Hibernate OneToOne с дочерним объектом CascadeType.ALL не может быть создан одновременно с родительским объектом.

Сообщение Anonymous »

Код для действительно простого примера, объясняющего проблему, скажем, у меня есть две таблицы со следующим отношением:

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

create table parent_table(
uuid char(36) primary key,
name varchar(50)
);

create table child_table(
parent_table_uuid char(36) primary key,
name varchar(50),
FOREIGN KEY (parent_table_uuid) REFERENCES parent_table(uuid)
);
Затем у меня есть следующие классы Entity JPA:

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

public class Parent {
@Id
@Column(name = "uuid", length = 36)
@Type(type = "uuid-char")
private UUID uuid;
@Column(name = "name")
private String name;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Child child;
}

public class Child {
@Id
@Column(name = "parent_table_uuid", length = 36)
@Type(type = "uuid-char")
private UUID uuid;
@Column(name = "name")
private String name;
}
И что я пытаюсь сделать:

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

    @Test
void createAndPersistParentWithChild() {
UUID parentUuid = UUID.randomUUID();
Parent parent = Parent.builder().uuid(parentUuid).name("parent").build();
parent.setChild(Child.builder().uuid(parentUuid).name("child").build());
Parent saved = parentRepository.save(parent);
assertThat(saved.getChild()).isNotNull();
}
Я ожидаю, что оба объекта будут сохранены одновременно, а родительский объект будет сохранен первым. Но я получаю исключение, и в журналах я вижу, что Hibernate сначала генерирует запрос на вставку для дочерней таблицы:

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

Hibernate:
insert
into
child_table
(name, parent_table_uuid)
values
(?, ?)
2024-04-26 15:45:42.509  WARN 46976 --- [Pool-1-worker-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1452, SQLState: 23000
2024-04-26 15:45:42.510 ERROR 46976 --- [Pool-1-worker-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : Cannot add or update a child row: a foreign key constraint fails (`test`.`child_table`, CONSTRAINT `fk_child_table_parent_table_uuid_to_parent_table_uuid` FOREIGN KEY (`parent_table_uuid`) REFERENCES `parent_table` (`uuid`))
Нужно ли мне что-то изменить, чтобы это заработало? Если я уберу ограничение, код будет работать отлично, и оба объекта можно будет сохранить и получить.
Примечание: мне не нужна ссылка на весь родительский объект в дочерний объект.

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

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

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

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

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

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

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