2012-02-14 46 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