Как я могу предотвратить выборку объединенных объектов Hibernate, когда я обращаюсь только к идентификатору внешнего ключа?

У меня есть объект 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)
);
13
задан teabot 18 March 2011 в 12:03
поделиться