2012-02-14 48 views
2

A UserCar是1比1。但User并不总是有一个Car休眠 - 如何获取一个属性,只有它不是null?

query = session.createQuery("select u from User as u join fetch u.car"); 

我只得到有汽车的用户。我如何修改此查询以获取所有用户?

我使用抓取,因为我需要在会话之外的user.car,我是这样做的吗?

谢谢。

+0

这SQL查询看起来像一个文本消息。 – cheeken 2012-02-14 10:05:23

+0

你是什么意思? – bunnyjesse112 2012-02-14 10:07:32

+0

随着所有的“你”,它看起来像发短信。 – cheeken 2012-02-14 10:09:06

回答

7

使用left join,这是专门为此目的而设计的。

query = session.createQuery("select u from User as u left join fetch u.car"); 
+0

非常感谢! – bunnyjesse112 2012-02-14 10:18:03

2

如果你只是想获得的所有用户,那么为什么不这样做:

List users = session.createCriteria(User.class).list(); 

如果您的用户类映射到汽车,然后返回的用户对象将具有与之相关联的汽车数据它会自动返回这些数据(取决于模式,它可能会延迟加载,也就是说,只有在尝试使用它时才会检索实际的Cat数据)。

+0

感谢您的回复! – bunnyjesse112 2012-02-14 10:19:15

1

你需要这辆车的结果吗?否则,“从用户选择你”应该完成这项工作。

如果汽车可以是空的,但你需要它被检索,你可以做一个联合提取“从用户选择你u你左外部联合获取u.car”。 希望这是正确的语法。外连接可以确保即使关系为null也能得到结果。在这种情况下,联合提取应该足够了。

有一些更多的(和工作)的例子在Hibernate文档(“连接抓取”):http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/

+0

感谢您的回答! – bunnyjesse112 2012-02-14 10:20:19