如何根据另外两个表JPA从表中获取记录

时间:2012-05-01 09:03:31

标签: jpa many-to-many

我正在尝试在JPA中做一些简单的事情。

我有一张桌子企业:

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

表产品:

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

因为它们与meny-to-many相关,所以我创建了另一个表businessHasProductID:

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

现在我想选择BusinessId和productID form businessHasProductID,其中BusinessId的名称为'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包含无效数据。

1 个答案:

答案 0 :(得分: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'