У меня есть объект Hibernate 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)
);