Изменить определенные значения в DAO / Repository при чтении сущностей - PullRequest
0 голосов
/ 11 июля 2019

Я читаю данные из старой унаследованной базы данных. Каким-то образом они размещают все несуществующие отношения, используя индекс 0, например: Объект Person:

id: 123
name: john
surname: snow
birthCityId: 0 <-- this means that there is no relationship between city and this person.

Теперь в JPA у меня проблема в том, что он загружает сущность человека, но не может найти связанную сущность города с индексом 0. Я хотел бы закодировать, что когда у меня есть город с идентификатором 0, тогда для сущности Сити устанавливается значение NULL. Как я могу это сделать? Я не хочу создавать новую сущность с индексом 0 в БД.

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 июля 2019

Вы можете использовать аннотацию Hibernate @NotFound:

@ManyToOne
@NotFound(action=NotFoundAction.IGNORE)
private City birthCity;

https://docs.jboss.org/hibernate/orm/5.3/javadocs/index.html?org/hibernate/annotations/NotFound.html

Я не вижу, чтобы другие опубликованные решения, работающие как исключение, возникали при загрузке Hibernate, т. Е. До того, как вы сможете обработать его другими способами.

1 голос
/ 11 июля 2019

Я предполагаю, что у вас есть

Person{
@Many2One @JoinColumn("birthCityId") City birthCity;
...}

самое простое решение - добавить строку таблицы с id = 0 в городе, а остальные будут равны нулю

и это для вашего класса

@PostLoad
public viod cityInit(){
   if(birthCity!=null&&birthCity.getId()==0){
      birthCity==null;
   }
}

Существуют более элегантные решения, но это поможет вам быстро начать работу

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