让我们说我有两张桌子 - “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。如何让没有所有者的猫出现在结果中?
感谢。
答案 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。