Spring Boot объединяет две сущности с недопустимыми записями FK - PullRequest
1 голос
/ 19 сентября 2019

Я сопоставляю некоторые классы Java, используя hibernate, для базы данных, к которой у меня нет прав на запись.Одно из полей, используемых в качестве FK между ClientEpisodes и Physician's, имеет 6 строк, которые содержат -1 для FK.Это явно недействительный ФК, но мне все равно нужно присоединиться и просто игнорировать этих врачей и иметь нулевого врача.Я присоединяюсь к классу, используя

    @JoinColumn(name = "epi_phid1", referencedColumnName = "ph_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
    private Physician physician;

Я попытался указать NO_CONSTRAINT, чтобы увидеть, будет ли он игнорировать его, но даже все равно я получаю следующую ошибку:

javax.persistence.EntityNotFoundException: Unable to find private.package.info.Physician with id -1

Есть ли способсказать Hibernate игнорировать недопустимые значения, такие как -1?

1 Ответ

0 голосов
/ 22 сентября 2019

Аннотация @ForeignKey со значением NO_CONSTRAINT указывает hibernate не генерировать внешние ключи, если используется генерация схемы.Это не влияет на проверку внутренней сущности в структуре JPA.Существует специфическая для hibernate @ NotFound аннотация, которую вы можете использовать:

 @JoinColumn(name = "epi_phid1", referencedColumnName = "ph_id")
 @NotFound(action = NotFoundAction.IGNORE)
 private Physician physician;

Однако имейте в виду, что если вы используете это в аннотации @OneToMany или @ManyToMany, которая отображает коллекцию, hibernateзаполнит недействительные / отсутствующие объекты нулем (поэтому список будет содержать нулевые значения).

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