У меня есть объект Hibernate Parent
, который соединен с другим: Child
. В базе данных у меня есть столбец parent.child_id
, который имеет ограничение внешнего ключа на child.id
. Предполагая, что я загружаюсь лениво, когда я загружаю экземпляр Parent
, я ожидаю, что у меня будет доступ к parent.getChild (). getId ()
без выполнения поиска в дочерней
таблице.
Я ожидал, что прокси, возвращенный parent.getChild ()
, сможет выполнить запрос к Child.getId ()
, поскольку он уже загрузил идентификатор дочернего элемента из столбца parent.child_id
. Однако я вижу дополнительный запрос к дочерней таблице
.
Почему этот дополнительный запрос необходим и как его избежать? В этом случае меня интересует только идентификатор внешнего ключа, и я не хочу загружать всю строку.
Классы:
class Parent {
@Id @Column(name = "id", unique = true, nullable = false)
private Integer id;
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "child_id")
private Child child;
}
class Child {
@Id @Column(name = "id", unique = true, nullable = false)
private Integer id;
@Column(name = "name")
private String name;
}
Таблицы:
CREATE TABLE child (
id int PRIMARY KEY,
name varchar(10)
);
CREATE TABLE parent (
id int PRIMARY KEY,
child_id int REFERENCES (child.id)
);