2013-02-18 5 views
1

У меня есть два класса: A и B вот так.Смещение гибернации игнорирует нулевые значения

public Class A { 
    public B b; 
    // Setter and Getter 
} 


public Class B { 
    String code; 
    // Setter and Getter 
} 

Я хочу иметь список A загруженный из базы данных, отсортированный по B.code. Но проблема в том, что экземпляр A имеет нулевое значение для своего b, он игнорируется и не загружается.

Что нужно делать здесь? Достаточно короткого намека.

ОБНОВЛЕНО

Вот мой код:

DetachedCriteria cr = DetachedCriteria.forClass(A.class, "a"); 
cr.createAlias("a.b", "b"); 
cr.addOrder(Order.asc("b.code")); 
// something like cr.list(); 
+0

решением может быть инициализация 'B b = new B()' и 'code =" "' – titus

+0

ORDER BY NULL LAST ?? –

+0

Я использую критерии и спящий режим. Есть ли способ сделать это с помощью 'addOrder'? –

ответ

1

По умолчанию createAlias(String associationPath, String alias) создает внутреннее соединение, но здесь вам нужно LEFT_OUTER присоединиться, так что используйте вместо следующего:

cr.createAlias("a.b", "b", CriteriaSpecification.LEFT_JOIN); 
+0

Я считаю, что вы правы. Спасибо. –

+0

Большое вам спасибо за это. Я пытался получить дополнительную работу от одного к одному и не мог понять, почему она продолжала конвертировать то, что должно было быть ЛЕВОЕ, присоединяется к INNER-соединениям, и я бы не получил никаких результатов для строк, у которых не было дочернего элемента. Из документов: «[createAlias ​​(String String)] ... Функционально эквивалентно createAlias ​​(String, String, int), используя CriteriaSpecification.INNER_JOIN для joinType. ' См. Здесь: [ссылка] (http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Criteria.html#createAlias%28java.lang.String,%20java.lang.String%29) – joshbodily