У меня сложная проблема JPA / Hibernate.
У меня есть две сущности A и B. Ссылки A B, но эта связь не требуется.
public class A {
@JoinColumn(name = "b_id", referencedColumnName = "b_id")
@OneToOne
private B b;
}
Я пишу SELECT NEW dto(a.b) FROM A a
это генерирует внутреннее соединение, что не очень хорошо для меня, потому что a.b может быть нулевым, и я хочу все объекты A. Поэтому я переписываю свой запрос следующим образом: SELECT NEW dto(b) FROM A a LEFT JOIN B b
Мы должны использовать псевдоним (b), чтобы предотвратить внутреннее соединение и получить только внешнее соединение. Хорошо, я получаю всю строку, но я получаю дополнительные запросы, Hibernate генерирует запросы SELECT для всех сущностей B. Почему, как я могу остановить это, я использую левое соединение, потому что я хочу только один запрос.
Edit:
Та же проблема с внутренними соединениями. Если используется SELECT NEW dto(a.b) FROM A a
, происходит дополнительное SELECT b FROM B b WHERE b.id = ?
, но если я звоню SELECT NEW dto(a.b.id) FROM A a
, дополнительный выбор для энтузиастов B отсутствует.
Edit2:
Это точно так же, как моя проблема: Та же проблема, без возможного решения.
Поскольку я не загружаю сам родительский объект, Hibernate не загружается с нетерпением B ...