我正在尝试在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包含无效数据。
答案 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'