Hibernate - Как получить свойство, только если оно не равно нулю? - PullRequest
2 голосов
/ 14 февраля 2012

A User - 1 к 1 с Car.Но User не всегда имеет Car.

query = session.createQuery("select u from User as u join fetch u.car");

Я получаю только пользователей с автомобилями.Как мне изменить этот запрос, чтобы получить всех пользователей?

Я использую fetch, потому что мне нужен user.car вне сеанса, я делаю это правильно?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 14 февраля 2012

Используйте левое соединение , которое было разработано для этой цели.

query = session.createQuery("select u from User as u left join fetch u.car");
2 голосов
/ 14 февраля 2012

Если вы просто хотите получить всех пользователей, то почему бы не сделать:

List users = session.createCriteria(User.class).list();

если ваш класс User отображается на Cars, то возвращаемые объекты User будут иметь связанные с ним данные Car, Hibernate будет возвращать эти данные автоматически (в зависимости от режима они могут быть загружены с задержкой, т. Е. Будут только извлекать фактические данные Cat, если вы попытаетесь их использовать).

1 голос
/ 14 февраля 2012

Вам нужна машина в результате?В противном случае «выберите u из Пользователя u» должен выполнить эту работу.

Если автомобиль может быть нулевым, но вам нужно его получить, вы можете сделать выборку соединения »выберите u из Пользователя u, оставив выборку внешнего соединения u.автомобиль".Надеюсь, это правильный синтаксис.Внешнее объединение гарантирует, что вы получите результаты даже при нулевых отношениях.В этом случае выборки соединения должно быть достаточно.

есть еще несколько (и работающих) примеров ("выборка соединения") в документах гибернации: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...