我有一个命名查询,用于检索LIST的UgAcyearExamSchedule
个内容,如下所示:
@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();
以下例外情况:
ERROR: No value specified for parameter
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
我不知道这些问题的主要原因,提前谢谢
答案 0 :(得分:0)
您定义名为“UgAcyearExamSchedule.getByDetail
”的命名查询,但您正在调用名为“UgAcyearExamSchedule.getByDetailAndDeptYear
”的命名查询。我建议你在这个其他命名查询(你还没有发布)上有一个额外的参数(deptYear?),所以它会抱怨额外的参数。
另外,您无法在JPQL中使用“collectionField =:collectionParam”。检查元素的“成员”是否更容易。
答案 1 :(得分:-1)
我相信您没有正确使用命名查询。我注意到您使用了createNamedQuery
方法,但是您的命名查询已经存在;你需要打电话给它。
我认为您的em
代表EntityManager或类似内容,因此如果您使用Hibernate Session Factory实例进行查询,则应尝试使用getNamedQuery
代替:
Query query = session.getNamedQuery("UgAcyearExamSchedule.getByDetailAndDeptYear")
.setParameter("ugDetails",details);
确保您的details
变量实际设置为某个值。还要确保正确使用Hibernate Session。
一些可能对您有帮助的链接:)
http://www.mkyong.com/hibernate/hibernate-parameter-binding-examples/
http://www.mkyong.com/hibernate/hibernate-named-query-examples/