2013-10-15 3 views
1

J'ai 2 entités à savoir Product et Transaction et ces 2 entités sont reliées via une relation Many to Many. J'ai le ci-dessous dans mon entité de transaction.JPQL ManyToMany @JoinTable sélectionner une requête?

@ManyToMany(cascade={CascadeType.ALL}) 
    @JoinTable(name="Transaction_Product") 

Quand je lance mon projet, il y aura 3 tables tables créées dans ma base de données et ils sont Transaction, produits et Transaction_Product respectivement. Le Transaction_Product est généré automatiquement lorsque j'exécute mon projet.

Je suis en mesure d'obtenir des articles de ma table de transaction via cette requête ci-dessous. Ma question est, comment puis-je obtenir des éléments de la table Transaction_Product?

J'ai essayé quelque chose comme la requête ci-dessous et cela n'a pas fonctionné.

Query q = em.createQuery("SELECT bt FROM Transaction_Product bt WHERE bt.ProductID = 1); 

Une aide s'il vous plaît? :)

+0

vous n'avez pas besoin d'obtenir des données de ce tableau, Que veux-tu accomplir ? –

+0

Salut à tous. Transaction_Product contient l'ID de transaction et l'ID de produit en tant que clé primaire. Pour l'une des exigences de mon projet, je dois m'assurer qu'un produit ne peut être supprimé que s'il n'y a pas de transaction pour le produit. Par conséquent, cela explique la raison pour laquelle je veux vérifier le Transaction_Product. S'il existe des lignes dans la table Transaction_Product en fonction d'un certain ID de produit, l'utilisateur ne peut pas supprimer le produit. –

Répondre

1

vérifier s'il y a des transactions avec le produit specifiez u peut utiliser:

Query q = em.createQuery("SELECT t FROM Transaction t join t.products p WHERE p.id = :id"); 

En supposant que Transaction classe a le terrain:

@ManyToMany(cascade={CascadeType.ALL}) 
    @JoinTable(name="Transaction_Product") 
private Set<Product> products; 
+0

merci! Ça a marché! =) –