【问题标题】:org.hibernate.QueryParameterException: could not locate named parameter [templateId]org.hibernate.QueryParameterException:找不到命名参数 [templateId]
【发布时间】:2016-10-21 07:40:00
【问题描述】:

请找到我使用的代码。下面的 HQL 查询失败说:

找不到命名参数 [templateId]

但是我的模型类中存在 templateId。

请帮助解决问题或出现此类错误的可能原因:

session = sessionFactory.openSession();         
                Transaction tx = session.beginTransaction();
                String hql ="from FieldTemplate where templateId= :id";
                Query query = session.createQuery(hql);
                query.setParameter("templateId", id);
                List file=query.list();
                tx.commit();
                return (FieldTemplate) file.get(0);

模型文件

@Entity
@Table(name="EDW_FIELDS")
public class FieldTemplate {
    @Id
    @Column(name="ID")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int Id;

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    @Column(name="TEMPLATE_ID")
    private int templateId;

    public int getTemplateId() {
        return templateId;
    }

    public void setTemplateId(int templateId) {
        this.templateId = templateId;
    }

    @Column(name="FIELD_NAME")
    private String fieldName;

    public String getFieldName() {
        return fieldName;
    }

    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }

    @Column(name="DISPLAY_ORDER")
    private int displayOrder;

    public int getDisplayOrder() {
        return displayOrder;
    }

    public void setDisplayOrder(int displayOrder) {
        this.displayOrder = displayOrder;
    }
}

请帮助解决我的问题

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您的参数名称是 id 而不是 templateId。您必须更改为:

    String hql ="from FieldTemplate where templateId= :id";
    Query query = session.createQuery(hql);
    query.setParameter("id", id);
    

    :后面的Name为参数名,必须匹配setParameter()的第一个参数

    【讨论】:

      【解决方案2】:

      如果它对某人有帮助,也删除任何 ;如果您的 :param 位于查询的最后。

      例如,您的查询必须是:

      Select * from blah where param = :param
      

      而不是

      Select * from blah where param = :param; 
      

      (注意最后的;)

      【讨论】:

      • 这有什么特别的原因吗?今天遇到了这个问题,但想了解它为什么会发生......
      • 不知道。这就是它的设计方式。它可能是;仅在 IDE(如 SQLYog 或 SQL Developer)中用作分隔符。它并不是真正的无错误查询的一部分,这就是为什么它在 JPA 语句中添加时会引发错误。
      【解决方案3】:
      String hql ="from FieldTemplate where templateId= :id";
      Query query = session.createQuery(hql); 
      query.setParameter("id", id);
      

      在 query.set 参数中两者都应该匹配

      【讨论】:

      • 嗨,欢迎来到 SO!如果您对答案中的代码提供更多上下文/解释,通常会更好地收到答案。
      猜你喜欢
      • 2012-09-08
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2020-06-04
      • 2012-11-03
      • 2017-11-21
      • 2017-12-30
      相关资源
      最近更新 更多