2015-12-19 2 views
0

У меня есть именованный запрос, который извлекает UgAcyearExamSchedule interms из списка выглядит следующим образом:Hibernate Не задано значение для параметра

@NamedQuery(name="UgAcyearExamSchedule.getByDetail", 
query="select u FROM UgAcyearExamSchedule u where 
u.ugAcyearExamScheduleDetails=:ugDetails") 

где ugAcyearExamScheduleDetails определяется в UgAcyearExamSchedule следующим образом:

@OneToMany(mappedBy="ugAcyearExamSchedule") 
private List<UgAcyearExamScheduleDetail> ugAcyearExamScheduleDetails; 

, когда я пытался для установки параметра для этих запросов следующим образом:

Query query = em.createNamedQuery("UgAcyearExamSchedule.getByDetailAndDeptYear"); 
query.setParameter("ugDetails",details); 
List<UgAcyearExamSchedule> examSChedules = (List<UgAcyearExamSchedule>) query.getResultList(); 

следующие исключения arrises:

ERROR: No value specified for parameter 
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet 

Я не знаю, что основную причину этих проблем, заранее спасибо

ответ

-1

Я считаю, что вы не используете правильно именованные запросы. Я заметил, что вы используете метод createNamedQuery, однако ваш Named Query уже существует; вам нужно позвонить ему.

Я полагаю, что ваши em стенды для EntityManager или подобного, так что если вы делаете ваши запросы с экземпляром Hibernate Session Factory вы должны попробовать использовать getNamedQuery вместо:

Query query = session.getNamedQuery("UgAcyearExamSchedule.getByDetailAndDeptYear") 
      .setParameter("ugDetails",details); 

Убедитесь, что ваш details переменного на самом деле что-то придумал. Также убедитесь, что вы правильно используете сеанс Hibernate.

Некоторые ссылки, которые могут помочь вам :)

http://www.mkyong.com/hibernate/hibernate-parameter-binding-examples/

http://www.mkyong.com/hibernate/hibernate-named-query-examples/

+0

Он использует API JPA API (EntityManager), а не Hibernate API (SessionFactory). createNamedQuery - это то, что он должен использовать. Вот ссылка, которая может помочь вам http://www.datanucleus.org/products/accessplatform_4_2/jpa/jpql.html#Named_Query –

0

Вы определяете именованный запрос с именем «UgAcyearExamSchedule.getByDetail» пока вы вызываете именованный запрос с именем «UgAcyearExamSchedule.getByDetailAndDeptYear». Я бы предположил, что у вас есть дополнительный параметр (deptYear?) Для этого другого именованного запроса (который вы еще не отправили), поэтому он жалуется на дополнительный параметр.

Также вы не можете использовать «collectionField =: collectionParam» в JPQL. Это более переносимо для проверки «ЧЛЕНА OF» для элементов.

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