2013-01-08 5 views
0

Я пытаюсь создать HQL запрос с несколькими где paramteres какHibernate HQL запрос

result = sessionFactory.getCurrentSession().createQuery("from County where " + [0].property + "=?"+","+ c[1].property + "=?") 

.setParameter (0, с [0] .value)
.setParameter (1, с [1] .value).список();

вместо того, чтобы делать это я пытаюсь создать запрос, который может обрабатывать любое количество paramters как

for(Params c:parms){`enter code here` 
    queryString+= c.property +" = "+c.value+","; 
    } 
result = (State) sessionFactory.getCurrentSession() 
       .createQuery("from County where " +queryString) 
       .list().get(0); 

Там запрос выглядит правильно, но она говорит, что «не может выполнить запрос»

ответ

1

а) почему сделал вы отказались от использования подготовленного заявления, например, с параметрами фиксированного размера?

b) почему вы приписываете c.property +" = "+c.value+","; «результату» вместо запросаString?

c) что это за запятая делает при указанной атрибуции? Разве это не должно быть «и» или «или»?

Re-комментируя ваши ответы

«а) использовать несколько PAMS вместо фиксированного размера»

String whereClause = new String(); 
for (Params p : params) { 
    if (whereClause.isEmpty()) 
     whereClause = " where "; 
    else 
     whereClause += " and "; 
    whereClause += p.property + " = ? "; 
} 
Query query = sessionFactory.getCurrentSession().createQuery("from County " + whereClause); 
for (int i = 0; i<params.size(); i++) { 
    query.setParameter(i, params[i].value); 
} 
result = (State) query.list().get(0); 

«с), даже если у меня есть только один из параметров для того, где, используя приведенный выше код не удается ! - «

Ну да, даже если у вас есть один параметр, вы все равно добавляете запятую в конце вашего запроса. Это недействительный формат.

+0

a) использовать несколько папок вместо фиксированного размера; b) он должен быть queryString c) даже если у меня есть только один параметр, для которого использование приведенного выше кода не выполняется! –

+0

@ user1827614 смотри мое редактирование – beder

+0

Спасибо, Это помогает! –

Смежные вопросы