JPA2 / Hibernate Order通过在引用的表/对象中使用字段

时间:2017-02-11 00:09:42

标签: java hibernate jpa-2.0

我试图在查询中使用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,'')也不会获取丢失的行!

任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:1)

通过使用隐式内部连接,可以将结果数减少到两个表中具有表示形式的项目数。

试试这个:

SELECT row FROM Phone row LEFT OUTER JOIN row.owner o ORDER BY o.name
如果没有Phonenumber的所有者,

o将为null,因此可能需要使用COALESCE和OUTER Join ...