У меня есть спящий объект, в котором есть три коллекции @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» и «Уникальный».