2012-05-01 2 views
0

J'essaie de faire quelque chose de simple dans JPA.Comment obtenir des enregistrements à partir d'une table basée sur deux autres tables JPA

J'ai une table Entreprises:

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

et de table:

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

Parce qu'ils apparenté Meny à plusieurs que je crée une autre table businessesHasProductID:

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

Maintenant, je veux sélectionner BusinessId et productID formulaire entreprisesHasProductID où le nom de Busi nessId = 'x' et le nom de productID = 'y'.

J'ai créé les tables, puis j'ai créé les classes d'entités (à partir de l'assistant dans netBeans). Je sais comment obtenir la table "Businesses" où Businesses.name = 'x' et je sais comment obtenir la table "Products" où Products.name = 'y'. mais je veux combiner ces résultats et obtenir les identifiants.

J'ai essayé de le faire:

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') 
       "); 

Ce n'est pas travaillé. Il se plaint que l'IN contient des données invalides.

Répondre

2

Si je comprends bien, vous voulez obtenir tous les [bId, pId] tuples qui existent dans la table de jointure et pour lesquels le nom de l'entreprise identifiée par bId est « x » et le nom du produit identifié par pId est « y '.

Dans ce cas, la requête suivante devrait faire ce que vous voulez:

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

Merci. C'est ce que je voulais dire. Mais en réalité la table businessesHasProductID a un champ de plus "prix". donc je veux choisir parmi les entreprisesHasProductID. Le – uriel

+0

il est encore plus facile: sélectionnez business.businessId, Produit.IDProduit de BusinessHasProduct intérieur bhp rejoindre entreprise bhp.business jointure produit bhp.product où business.name = 'x' et product.name = 'y' –

+0

Je vais l'essayer. Merci. – uriel

Questions connexes