2013-07-07 13 views
5

Wiążę nazwane parametry w instrukcji HQL, ale po prostu się nie zapełnia.Nazwa kolumny hibernacji Parametr 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());   

to coś takiego, co oznacza, że ​​parametry (coln, colv) nie są ustawione i zwraca 0 rekordów.

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

Każda pomoc dotycząca wiązania nazw kolumn w instrukcjach HQL jest doceniana. Dzięki. Mahdi.

Odpowiedz

6

Nie można powiązać nazwy kolumny jako parametru. Tylko wartość kolumny. Ta nazwa musi być znana podczas obliczania planu wykonania, przed powiązaniem wartości parametrów i wykonaniem zapytania. Jeśli naprawdę chcesz mieć takie dynamiczne zapytanie, skorzystaj z API Criteria lub innego sposobu dynamicznego tworzenia zapytania.

1

Spróbuj zastąpić Zapytanie o kryteria.

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