2010-12-07 8 views
0

Ich bin neuen Rahmen zu spielen und Hibernate, ich habe ein einfaches Problem, dass ich nicht in der Lage binBenötigen Sie auf Hibernate und JPQL Syntax helfen

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

Ich bin nicht sicher zu lösen, wie die Abfrage zu schreiben und die params
wie ich jedes Feld soll geprüft werden gegen entsprechenden Wert

so etwas wie dies (die Fehler erzeugt):

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: Derart, dass die Abfrage wird:

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

und params wird:

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

Antwort

0

Ich denke, es ist besser setParameter() zu verwenden und 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(); 
Verwandte Themen