【问题标题】:Hibernate No value specified for parameterHibernate 没有为参数指定值
【发布时间】:2015-12-19 21:14:26
【问题描述】:

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

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

其中ugAcyearExamScheduleDetailsUgAcyearExamSchedule 中定义如下:

@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

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

【问题讨论】:

    标签: hibernate jpa jdbc jpql


    【解决方案1】:

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

    您也不能在 JPQL 中真正使用“collectionField = :collectionParam”。检查元素的“成员”更便于携带。

    【讨论】:

      【解决方案2】:

      我相信您没有正确使用命名查询。我注意到您使用了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/

      【讨论】:

      猜你喜欢
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2020-03-16
      • 1970-01-01
      相关资源
      最近更新 更多