2013-07-07 20 views
5

Sono vincolato Parametri nominati in un'istruzione HQL, ma non viene riempito.Hibernate Nome colonna Parameter Binding

//colname = "AdminsInfo.name"; assume it is from method's input 
//colval = input.getName().toString(); // assume it is from method's input 

String query = "from AdminsInfo where :coln = :colv"; 
Query q = session.createQuery(query); 
q.setParameter("coln",colname); 
q.setParameter("colv",colval); 

System.out.println(q.toString());   

che emette qualcosa di simile che significa parametri (Coln, COLV) non sono impostati e restituisce 0 record.

QueryImpl(from AdminsInfo where :coln = :colv) 
Hibernate: select adminsinfo0_.Row as Row1_0_, adminsinfo0_.ID as ID2_0_,adminsinfo0_.Name as Name3_0_, ... where ?=? 

Qualsiasi aiuto su come associare i nomi di colonna nelle istruzioni HQL è apprezzato. Grazie. Mahdi.

risposta

6

Non è possibile associare un nome di colonna come parametro. Solo un valore di colonna. Questo nome deve essere noto quando viene calcolato il piano di esecuzione, prima di assegnare i valori dei parametri ed eseguire la query. Se si desidera veramente avere una query così dinamica, utilizzare l'API Criteria o un altro modo per creare dinamicamente una query.

1

Provare a sostituire la query per i criteri.

Criteria c = session.createCriteria(AdminsInfo.class); 
c.add(Restrictions.eq(colname,colval)); 
c.list();