0

JPAで簡単なことをしようとしています。

私はテーブルを持っています

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

とテーブル製品:

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

これらは多対多の関係にあるため、別のテーブル businessHasProductID を作成しました。

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

ここで、BusinessId の名前 = 'x' と productID の名前 = 'y' である BusinessId と productID フォームの businessHasProductID を選択します。

テーブルを作成してから、(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 に無効なデータが含まれていると不平を言っています。

4

1 に答える 1

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'
于 2012-05-01T09:12:16.867 に答える