Hibernate没有为参数指定值

Hibernate没有为参数指定值,hibernate,jpa,jdbc,jpql,Hibernate,Jpa,Jdbc,Jpql,我有一个命名查询,检索列表中的UgAcyearExamScheduleinterms,如下所示: @NamedQuery(name="UgAcyearExamSchedule.getByDetail", query="select u FROM UgAcyearExamSchedule u where u.ugAcyearExamScheduleDetails=:ugDetails") @OneToMany(mappedBy="ugAcyearExamSchedule") private

我有一个命名查询,检索列表中的
UgAcyearExamSchedule
interms,如下所示:

@NamedQuery(name="UgAcyearExamSchedule.getByDetail", 
query="select u FROM UgAcyearExamSchedule u where 
u.ugAcyearExamScheduleDetails=:ugDetails")
@OneToMany(mappedBy="ugAcyearExamSchedule")
private List<UgAcyearExamScheduleDetail> ugAcyearExamScheduleDetails;
Query query = em.createNamedQuery("UgAcyearExamSchedule.getByDetailAndDeptYear");
query.setParameter("ugDetails",details);
List<UgAcyearExamSchedule> examSChedules = (List<UgAcyearExamSchedule>) query.getResultList();
其中,
UgAcyearExamSchedule
中对UgAcyearExamSchedule详细信息的定义如下:

@NamedQuery(name="UgAcyearExamSchedule.getByDetail", 
query="select u FROM UgAcyearExamSchedule u where 
u.ugAcyearExamScheduleDetails=:ugDetails")
@OneToMany(mappedBy="ugAcyearExamSchedule")
private List<UgAcyearExamScheduleDetail> ugAcyearExamScheduleDetails;
Query query = em.createNamedQuery("UgAcyearExamSchedule.getByDetailAndDeptYear");
query.setParameter("ugDetails",details);
List<UgAcyearExamSchedule> examSChedules = (List<UgAcyearExamSchedule>) query.getResultList();

我不知道这些问题的主要原因,请提前感谢

我相信您没有正确使用命名查询。我注意到您使用了
createNamedQuery
方法,但是您的命名查询已经存在;你需要给它打电话

我假设您的
em
代表EntityManager或类似工具,因此,如果您使用Hibernate会话工厂实例进行查询,您应该尝试使用
getNamedQuery

Query query = session.getNamedQuery("UgAcyearExamSchedule.getByDetailAndDeptYear")
             .setParameter("ugDetails",details);
确保
details
变量实际设置为某个值。还要确保正确使用Hibernate会话

一些可能对您有帮助的链接:)


您定义了一个名为“
UgAcyearExamSchedule.getByDetail
”的命名查询,但您正在调用名为“
UgAcyearExamSchedule.getByDetailAndDeptYear
”的命名查询。我建议您在另一个命名查询(您还没有发布)上有一个额外的参数(deptYear?),因此它会抱怨额外的参数

此外,您不能在JPQL中真正使用“collectionField=:collectionParam”。检查元素的“成员”更方便。

他使用的是JPA API(EntityManager)而不是Hibernate API(SessionFactory)。createNamedQuery是他应该使用的。这里有一个链接可以帮助你