2013-05-17 3 views
0

У меня есть поле: «Страна» класса Entity, который является необязательным. Страна ссылается на таблицу, содержащую список идентификаторов с атрибутами страны.Как вернуть пустой объект, а не Null при левом соединении

Для того, чтобы включить строки в моей таблице, где ни одна страна не давалось я использовал:

.....createAlias("country_Id", "Co", Criteria.LEFT_JOIN); 

Я предпочел бы пустой объект Страна должен быть возвращен, а не просто пустой для страны поле Entity объект.

Для начала - мой подход, получающий все строки таблицы, те, у кого/без страны правильные? Или есть лучший метод?

Наконец, вы посоветуете создать перехватчик, чтобы превратить нуль в объект пустой страны? В противном случае я просто обработаю его в своем коде, который обрабатывает возвращаемые результаты поиска, добавив инструкцию IF (null).

+0

Я предлагаю вам проверить, если значение этого столбца равен нулю , затем выполните 'Country c = new Country();' или 'Country c = countryDAO.create();' если вы используете DAO, и у вас есть метод для создания пустых объектов (как в моем проекте). Наконец, просто нужно «... setCountry (c);» и вернуть объект, содержащий эту страну/пустую страну. – DaGLiMiOuX

+0

выполните эту проверку после того, как результаты поиска будут возвращены мне, и я начну обрабатывать результаты? – user1782673

+0

Точно. Когда запрос завершится, переходите к проверке своих элементов, если у них есть страна как «null» и добавьте ее в пустой объект. Если это только для 'get (KEY_TYPE id)', просто используйте 'if' и добавьте его. Если вы используете 'findAll()', вам придется использовать цикл, и это не очень хорошая идея, но я не знаю, есть ли другой способ сделать это (любой метод или свойство XML для 'hbm 'файлы). – DaGLiMiOuX

ответ

1

Вы можете попробовать функцию COALESCE, чтобы вернуть новую страну, если поле имеет значение null: SELECT COALESCE(Co, new Country()) .... Но вам может потребоваться привязать ваше основное лицо к объекту Country вместо использования country_Id.

[EDIT] Он может быть использован с CriteriaBuilder также: cb.coalesce(root.get("Co"), new Country()) /\ будет использовать тот же по умолчанию экземпляра Country для всех результирующих линий

+0

Может ли« COALESCE »быть добавлен как параметр к объекту Criteria? – user1782673

+0

Только что изменил мой ответ – gma

+0

Это выглядит как хороший ответ, однако я использую библиотеку критериев спящего режима и не хочу менять этот java jpa one. – user1782673