2010-12-07 3 views
0

Je suis nouveau à jouer cadre et mise en veille prolongée, j'ai un problème simple que je suis incapable de résoudreBesoin d'aide sur la syntaxe Hibernate et JPQL

public static void listMembers(int page,int pageSize,String[] fields,String[] values) { 
    List<Member> members = Member.find(query,params).fetch(); 
    render(members); 
} 

Je ne suis pas sûr comment écrire la requête et les params
comme je veux chaque champ à vérifier contre valeur correspondante

quelque chose comme ça (ce qui génère des erreurs):

public static void listMembers(int page,int pageSize,String[] fields,String[] values) { 
    String query = "" ; 
    String[] params = new String[values.length*2] ; 
    int i = 0 ; 
    for(i = 0 ; i < fields.length-1 ; i+=2) { 
     query += "?"+(i+1)+" like ?"+(i+2)+" AND" ; 
     params[i] = fields[i] ; 
     params[i+1] = "%"+values[i]+"%" ; 
    } 
    query += "?"+(i+1)+" like ?"+(i+2) ; 
    params[i] = fields[i] ; 
    params[i+1] = values[i] ; 


    List<Member> members = Member.find(query,params).fetch(); 
    render(members); 
} 

Edit: telle que la requête sera:

?1 like ?2 AND ?3 like ?4 AND ..... 

et params sera:

field1,%value1%,field2,%value2%,... 

Répondre

0

je pense qu'il est préférable d'utiliser setParameter() et EntityManager:

String jpql = "select m from Member m where "; 
for (int i = 0; i < fields.length; i++) { 
jpql += (i > 0 ? " AND " : "") + fields[i] + " like '%?%' "; 
} 
Query q = entityManager.createQuery(jpql); 
for (int i = 1; i <= values; i++) { 
q.setParameter(i, values[i]); 
} 
List<Members> members = q.getResultList();