Hibernate не может обрабатывать три коллекции oneToMany в одной сущности - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть спящий объект, в котором есть три коллекции @OneToMany. Во время сохранения Hibernate вставляет только по одному за раз, в результате чего другие два поля выдают ошибку «Поле« XXXX-Field-XXXX »не имеет значения по умолчанию».

Я использую Hibernate Core 5.3.7.Final, JPA 2.2

Основная сущность:

@Entity
@Table(name = "entityOneDto")
public class EntityOneDto extends Dto<EntityOneDto, EntityOne> {
private String entityId;
private String label;
private String testContent;
private Integer count;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<DocumentDTO> list1Documents;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<DocumentDTO> list2Documents;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<DocumentDTO> list3Documents;

DocumentDTO объект:

@Entity
@Table(name = "document")
public class DocumentDTO extends Dto<DocumentDTO, Document> {
private String documentId;
private String testContent;
private int count;
private String title;
private LocalDateTime date;

Журналы гибернации:

    Hibernate: select next_val as id_val from hibernate_sequence for update
    Hibernate: update hibernate_sequence set next_val= ? where next_val=?
    Hibernate: select next_val as id_val from hibernate_sequence for update
    Hibernate: update hibernate_sequence set next_val= ? where next_val=?
    Hibernate: select next_val as id_val from hibernate_sequence for update
    Hibernate: update hibernate_sequence set next_val= ? where next_val=?
    Hibernate: select next_val as id_val from hibernate_sequence for update
    Hibernate: update hibernate_sequence set next_val= ? where next_val=?
    Hibernate: insert into entityOneDto (entityId, testContent, label, count, id) values (?, ?, ?, ?, ?)
    Hibernate: insert into document (testContent, documentId, date, count, title, id) values (?, ?, ?, ?, ?, ?)
    Hibernate: insert into document (testContent, documentId, date, count, title, id) values (?, ?, ?, ?, ?, ?)
    Hibernate: insert into document (testContent, documentId, date, count, title, id) values (?, ?, ?, ?, ?, ?)
    Hibernate: insert into entityOneDto_document (entityId_id, list1Documents_id) values (?, ?)
    2019-04-30 18:20:29.830  WARN 55440 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1364, SQLState: HY000
    2019-04-30 18:20:29.837 ERROR 55440 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : Field 'list2Documents_id' doesn't have a default value
    2019-04-30 18:20:29.983  INFO 55440 --- [nio-8080-exec-4] o.h.e.j.b.internal.AbstractBatchImpl     : HHH000010: On release of batch it still contained JDBC statements
    2019-04-30 18:20:30.126 ERROR 55440 --- [nio-8080-exec-4] o.h.i.ExceptionMapperStandardImpl        : HHH000346: Error during managed flush [org.hibernate.exception.GenericJDBCException: could not execute statement]

Из того, что я вижу, он создает три документа, но затем вставляет только один из них:

Hibernate: insert into entityOneDto_document (entityId_id, list1Documents_id) values (?, ?)

, что неверно, поскольку таблица соединений имеет основной идентификатор сущности и три поля для каждой коллекции документов: hibernate 'сгенерированная таблица

Пожалуйста, помогите. Можно ли это решить?

ОБНОВЛЕНИЕ : Что также странно, один из этих listDocuments также является ПЕРВИЧНЫМ ключом в таблице entityonedto_document. Таким образом, у меня есть 2 первичных ключа: entityId_id и list1Documents_id. List2 и list3 - это «NN» и «Уникальный».

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