Hibernate:如果外键为null,则按链接表中的字段排序

时间:2009-07-07 16:36:19

标签: java mysql hibernate sorting

让我们说我有两张桌子 - “Cat”和“Cat owner”,它们与多对一的链接如下:

<class name="com.example.Cat" table="cat">
        ... 
        <many-to-one name="owner"
            class="com.example.CatOwner"
            column="owner_id" 
            not-null="false" insert="true" update="true" cascade="none" lazy="false"/>
</class>

现在我想获得按猫主人名字排序的所有猫的列表,如下所示:

session.createQuery("from Cat cat order by cat.owner.name");

问题是如果cat没有所有者(owner_id = NULL),则不会使用此查询选择该cat。如何让没有所有者的猫出现在结果中?

感谢。

2 个答案:

答案 0 :(得分:2)

看看Hibernate docs,14.3. Associations and joins。您的查询应该是:

 from Cat cat left join cat.owner owner order by owner.name

答案 1 :(得分:0)

在标准SQL中,它是OUTER JOIN的典型示例,因此快速回答是尝试编写查询,如:

session.createQuery("select cat from Cat cat, CatOwner cato WHERE cato.id(+) = cat.ownerId order by cato.name NULLS LAST");

注意:我没有测试过发布的代码! 注2:我认为正确配置了Oracle RDBMS和hibernate.properties。