我试图在查询中使用ORDER BY来按引用对象中的字段排序。例如,使用以下类:
@Entity
class Phone
{
@Id
Long id;
@ManyToOne
Person owner;
}
@Entity
class Person
{
@Id
Long id;
String name;
}
我想列出所有电话,按照所有者的名字排序。 这大部分都有效,除了它不包括没有所有者的手机。 (IE。,所有者为空)。
例如,
{
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,'')也不会获取丢失的行!
任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
通过使用隐式内部连接,可以将结果数减少到两个表中具有表示形式的项目数。
试试这个:
SELECT row FROM Phone row LEFT OUTER JOIN row.owner o ORDER BY o.name
如果没有Phonenumber的所有者,o将为null,因此可能需要使用COALESCE和OUTER Join ...