2017-02-11 9 views
0

Я пытаюсь использовать ORDER BY в запросе для сортировки по полю в ссылочном объекте. Например, со следующими классами:JPA2/Hibernate Order С помощью поля в ссылочной таблице/объекте

@Entity 
class Phone 
{ 
    @Id 
    Long id; 

    @ManyToOne 
    Person owner; 
} 

@Entity 
class Person 
{ 
    @Id 
    Long id; 

    String name; 
} 

Я хочу перечислить все телефоны, заказанные по имени владельца. Это работает по большей части, за исключением того, что он исключает телефоны, у которых нет владельца. (IE., Владелец - null).

Например,

{ 
    etc... 
    // Count number of phones in database 
    Query q = em.createQuery("SELECT COUNT(*) FROM Phone"); 
    Number n = (Number)q.getSingleResult(); 
    // N shows 10 phones 

    q = em.createQuery("SELECT row FROM Phone row ORDER BY row.owner.name"); 
    List<Phone> phones = q.getResultList(); 
    // phones.size() is only 5??? 
} 

Использование ORDER BY COALESCE (row.owner.name, '') не принести недостающие строки либо!

Любая помощь была бы замечательной, спасибо!

+1

Вы должны указать внешнее_соединение там. Когда вы включаете владельца в запрос, вы неявно выполняете внутреннее соединение. – zmf

ответ

1

Используя неявное внутреннее объединение, вы уменьшаете количество результатов до количества элементов, имеющих представления в обеих таблицах.

Попробуйте это:

SELECT row FROM Phone row LEFT OUTER JOIN row.owner o ORDER BY o.name 

о будет нулевым, если нет Владелец PHONENUMBER, поэтому, возможно, придется использовать COALESCE с OUTER JOIN ...

+0

Отлично! Благодарю. – Jamie

 Смежные вопросы

  • Нет связанных вопросов^_^