2013-07-26 124 views
-1

我是hibernate的新手,所以我非常肯定你們中的一些人會被這個問題所逗樂。它一直讓我瘋狂。這是一個hibernate查詢問題。休眠查詢兩個表格

我有兩個表,假設一個是出口,一個是傳單

  • 出口 - 出口名稱,出口地址,MERCHANTNAME

  • 傳單 - flyerId,flyerName,MERCHANTNAME

所以傳單屬於商人和商人有很多網點等,

使用Hibernate,得到一個簡單的查詢,希望從使用MERCHANTNAME出口表中獲取不同的網點,我使用的代碼:

public List<Outlet> getDealOutlet(@PathParam("merchant") String merchant) { 

some code here.... 

outletsList = session.createQuery("from Outlet as outlet where outlet.merchantName =  :merchant").setString("merchant", merchant).list(); 

some code here 

} 

這工作。

我的問題是如何返回特定flyerId的網點列表。

任何幫助表示讚賞感謝

回答

1

問題:「如何返回與par相關聯的商家的商店列表特洛伊傳單?「

如果是這樣,你是否有一個表格商家映射到一個類商家?這是走下坡路。 Hibernate可以很容易地讓你跨連接查詢,但是如果Hibernate不知道連接,因爲你得到的只是一個叫做merchantName的魔術字符串,你知道兩個表中的情況恰好相同,那麼Hibernate不能幫助你出去。

(當然,你可以運行兩個查詢,但我懷疑這就是你要找的內容。)

+0

您需要聲明一個Merchant類(使用Java),然後將其映射(在.hbm文件中)到包含商家的表中。然後Outlet和Flyer(使用Java)都會引用他們的Merchant(商家商家,而不是你現在的String商人名稱),並且你會使映射(在.hbm中)將他們鏈接在一起。 您應該閱讀Hibernate文檔的所有這兩部分:https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration-manytoone和https ://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/collections.html。 – Tim

+0

此外,[Java持久與休眠](http://www.manning.com/bauer2/)是一本很好的書,涵蓋了使Hibernate正常工作的所有複雜細節。如果你打算掌握Hibernate,那就是要閱讀的書。 – Tim

0

這取決於你的映射,如果有Merchant實體,並且兩個其他實體有關聯,它可以寫成:

select o 
    from Outlet o 
    join o.merchant m 
    join m.flyers f 
where f.id = :flyersId 

其他明智的,你可以做一些像你在SQL中做的事情:

select o 
    from Outlet o, Flyers f 
where o.merchant = f.merchant and f.id = :flyersId 
+0

喜阿米爾和Tim,感謝您的建議,但是,我在這裏做需要多一點幫助。 我確實有一個Merchant表,但是當你說兩個實體之間的關聯,並且如Tim提到的那樣,映射到一個類Merchant時,你可以舉一個例子,它是在java類還是在hbm映射中。 一個例子會有幫助。乾杯 –

+0

那麼,你應該去冬眠的文檔!否則,你將不會學到任何東西。 –