#java #spring-boot #hibernate #spring-data-jpa #hibernate-mapping
#java #весенняя загрузка #впасть в спящий режим #весна-данные-jpa #отображение в спящий режим #спящий режим #spring-data-jpa
Вопрос:
Я использую однонаправленное отображение @ManyToOne. Код выглядит следующим образом.
public class PolicyCatalogEntity extends BaseEntity {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "policyReferenceId", referencedColumnName = "policyReferenceId",
nullable = false, insertable = false, updatable = false)
private PolicyConfigDetailsEntity policyConfigDetailsEntity;
@NotBlank
private String lobName;
}
PolicyDetailsEntity выглядит следующим образом
public class PolicyConfigDetailsEntity extends BaseEntity implements Serializable {
@NotNull
private Long policyReferenceId;
@NotBlank
private String policyName;
private boolean isActive;
}
Нужно ли мне специально добавлять столбец policyReferenceId
PolicyCatalogEntity
?
PS: policyReferenceId
не является основным ключом. Это просто составной ключ.
Если нет, то я получаю следующую ошибку Field 'policy_reference_id' doesn't have a default value
Hibernate:
insert
into
policy_catalog
(created_at, created_by, last_modified_by, updated_at, version, end_date, is_active, lob_name, lob_ref_id_type, start_date, tnc_url)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Комментарии:
1. Если нет, то я получаю следующую ошибку
Field 'policy_reference_id' doesn't have a default value
Ответ №1:
Поскольку вы упомянули insertable = false
здесь:
@JoinColumn(name = «policyReferenceId», referencedColumnName = «policyReferenceId», обнуляемый = false, вставляемый = false, обновляемый = false)
режим гибернации позволит вашей базе данных обрабатывать вставленное значение самостоятельно. В этом случае вам необходимо установить значение по умолчанию для этого столбца в структуре таблицы БД
также обратите внимание на updatable = false
, который позволит вам вставлять новые значения только для этих столбцов