2010-11-02 13 views
1

EJB-QL Je suis en train de créer une requête comme ceci:question EJB-QL comment pourrais-je définir une liste en tant que paramètre comme: select o de table où id dans (Liste <Long> listOfIds)

SELECT * 

FROM table 

WHERE id IN ([id1],[id2],[id3],...); 

C'est une requête normale pour oracle ou mysql mais comment puis-je faire des paramètres EJB-QL en liste?

SELECT o 

FROM ClassName 

WHERE ClassNameId IN (List<Long> listOfIds); 

est-il un moyen de faire cela?

Plus important encore est-ce que cela serait plus efficace que d'exécuter une requête distincte pour chaque identifiant de la liste?

Toutes les suggestions seraient appréciées. Par souci de clarté, j'essaie d'exécuter une requête pour retourner plusieurs lignes en fonction d'une liste d'identifiants (pas la table entière, pas le contenu d'une autre table, mais une liste arbitraire d'identifiants). J'espère pouvoir exécuter cette requête une fois au lieu d'exécuter plusieurs fois une requête de recherche normale (une fois pour chacun des identifiants de la liste).

Merci,

Jim

Répondre

0

Je ne suis pas un expert avec EJB-QL. Vous pourriez trouver les exemples de here utiles.

SELECT OBJECT (o) FROM Order AS o IN (o.lineItems) li 
WHERE li.quantity = ?1 
2
String queryStr = "select o from ClassName o where o.classNameId IN :ids"; 

Query query = entityManager.createQuery("queryStr"); 
List<Long> listOfIds = getIds(); 
query.setParameter("ids", listOfIds); 

List<ClassName> classNameList = (List<ClassName>) query.getResultList();