У меня есть спящий объект Parent
, который соединен с другим: Child
. В базе данных у меня есть столбец parent.child_id
, который имеет ограничение внешнего ключа для child.id
. Предполагая, что я лениво загружаюсь, когда я загружаю экземпляр Parent
, я ожидаю, что смогу получить доступ к parent.getChild().getId()
без поиска в таблице child
.
Я ожидал, что прокси, возвращенный parent.getChild()
, сможет выполнить запрос к Child.getId()
, так как он уже загрузил идентификатор ребенка из столбца parent.child_id
. Тем не менее, я вижу дополнительный запрос к таблице child
.
Зачем нужен этот дополнительный запрос и как его избежать? В этом случае меня интересует только идентификатор внешнего ключа, и я не хочу загружать всю строку.
Классы:
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)
);