java org.hibernate.QueryParameterException:找不到命名参数[templateId]

ne5o7dgx  于 2023-06-04  发布在  Java
关注(0)|答案(4)|浏览(207)

请找到我使用的代码。下面的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;
    }
}

请帮助解决我的问题

clj7thdc

clj7thdc1#

如果它帮助了某人,也删除任何;如果你的:param在查询的最后。
例如,您的查询必须是:

Select * from blah where param = :param

而不是

Select * from blah where param = :param;

(note the ; at the end)

bwntbbo3

bwntbbo32#

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

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

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

t3irkdon

t3irkdon3#

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

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

k4emjkb1

k4emjkb14#

我也遇到了一个问题,很难发现我的查询格式不正确,并且单引号没有结束...

SELECT * FROM Nuts WHERE FOO LIKE ':firstParamName AND BAR=:secondParamName

我遇到的错误是它只期望列表中的第二个[firstParamName]
顺便说一句,对于Java代码,我喜欢使用

final String PARAM_SOME_NAME = ":fooValueParam"
QUERY = "SELECT * FROM Nuts WHERE FOO LIKE " + PARAM_SOME_NAME
Query nativeQry = em.createNativeQuery(QUERY)
nativeQry.setParameter(PARAM_SOME_NAME.substring(1), aValue)

避免错别字

相关问题