#java #spring-boot #hibernate #jpa #spring-data-jpa
#java #весенняя загрузка #переход в спящий режим #jpa #spring-данные-jpa
Вопрос:
Итак, у меня есть таблица со столбцом, который имеет ссылку на другую таблицу, отличную от внешнего ключа (без фактической ссылки на таблицу), но в другой таблице может не быть соответствующей строки
class Component {
@OneToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "PART_ID", referencedColumnName="PART_ID", nullable = true, insertable = false, updatable = false)
@NotFound(action = NotFoundAction.IGNORE)
private Part part
@Id
@Column(name = "COMPONENT_ID")
private Long id;
}
Класс части
class Part {
@Id
@Column(name = "PART_ID")
private Long id;
private String name;
}
без этого @NotFound(action = NotFoundAction.IGNORE)
я получаю сообщение об ошибке
но при этом я не получаю ошибку и не получаю нулевое значение, но мне нужно, чтобы id
присутствовало
например) Я ищу это
{"component": {"id":12, "part":{"id":100,"name":null}}}
но я получаю это (если совпадения нет)
{"component": {"id":12, "part":null}}
но я получаю это (если совпадает)
{"component": {"id":12, "part":{"id":100,"name":"part_name"}}}
Пробовал с nullable=false
и некоторыми комбинациями для updatable
и insertable
, но все равно ничего не работает
Ответ №1:
Если таблица имеет ссылку на другую таблицу, но в другой таблице может не быть соответствующей строки, структура базы данных, вероятно, нарушена.
Вам действительно нужно то, о чем вы просите?
База данных имеет 2 part_id. Один в компоненте, а другой частично. Код Java состоит только из одной части.
Вы можете создать дополнительное поле
сlass Component {
private Long partId;
...
и в методе @postLoad — создайте новую деталь с желаемым идентификатором.
@PostLoad
public void postLoad(){
if(part == null amp;amp; partId!=null){
part= new Part();
part.setId(partId)
}
}
}
Комментарии:
1. вы правы, внешнего ключа ссылки на таблицу нет, но нужно объединить их в режиме гибернации, есть ли способ?