2012-05-01 28 views
0

我試圖在JPA中做一些簡單的事情。如何從基於另外兩個表的表獲取記錄JPA

我有一個表業務:

BusinessId name 
------------ ------ 
    1   Joe 
    2   bob 

而且Products表:

productID  name 
------------ ------ 
    1   Pen 
    2   paper 

因爲他們相關的MENY一對多我創建另一個表businessesHasProductID:

BusinessId productID 
------------ ----------- 
     1   1 
     1   2 
     2   2 

現在我要選擇BusinessId和productID形式的businessHasProductID,其中Busi的名稱爲nessId ='x'和productID的名稱='y'。

我構建了表格,然後創建了實體類(從netBeans中的嚮導)。我知道如何獲得Businesses.name ='x'的「Businesses」表,並且我知道如何獲得Products.name ='y'的「Products」表。但我想結合這些結果並獲取ID。

我試圖做的:

Query query = getEntityManager().createQuery(" 
       SELECT b FROM businessesHasProductID WHERE b.BusinessId IN 
        (SELECT t0.BusinessId FROM Businesses t0 WHERE t0.BusinessId = 'x') 
       AND b.productID IN 
        (SELECT t1.productID FROM Products t1 WHERE t1.productID = 'y') 
       "); 

這沒有奏效。它抱怨IN包含無效數據。

回答

2

如果我理解正確的話,你想獲得的所有[bId, pId]元組中存在的連接表以及其中由bId確定企業的名稱是「X」和pId標識的產品的名稱爲「Y 」。

如果是這樣,下面的查詢應該做你想要什麼:

select business.businessId, product.productId 
from Business business 
inner join business.products product 
where business.name = 'x' 
and product.name = 'y' 
+0

感謝。我正是這個意思。但實際上表businessHasProductID有一個字段「價格」。所以我想從businessHasProductID中進行選擇。 – uriel

+0

的那就更簡單了:從BusinessHasProduct BHP內選擇business.businessId,product.productId 加入bhp.business業務 內加入bhp.product產品 其中business.name = 'X' 和product.name = 'Y' –

+0

我會試試看。謝謝。 – uriel

相關問題