当前位置: 首页 > 知识库问答 >
问题:

HIbernate:没有设置所有的命名参数

邢凯歌
2023-03-14

我正在jpa中设置本机查询,但它没有按预期运行并给我异常这是我的查询:

    l_query = "SELECT creationdate AS " + m_dateFrom.getValue(); 
                l_query += "AND creationdate AS"  + m_dateTo.getValue(); 
                l_query += "from tablename";

    Error i am getting is:

     org.hibernate.QueryException: Not all named parameters have been set: [20:53] [SELECT creationdate AS Tue Mar 01 10:20:53 IST 2016AND creationdate ASThu Apr 07 10:20:53 IST 2016from tablename]

共有3个答案

蒋茂材
2023-03-14

你的l_query是错的。您在查询的不同部分遗漏了空格。QueryException向您显示了错误的sql。

您提到您在项目中使用了jpa。你为什么不使用它?

对我来说,在这种情况下,您似乎不需要简单的本机查询。请改用 jpql 查询

查询也是sql注入的一个大问题,因为您直接在查询中给出属性值。请改用参数。

例如,您的代码可以基于以下示例代码:

public List findWithName(String name) {
    return em.createQuery(
        "SELECT c FROM Customer c WHERE c.name LIKE :custName")
        .setParameter("custName", name)
        .getResultList();
}

这里有一些例子

编辑:

StringBuilder l_query = new StringBuilder("SELECT t.creationdate AS '" + m_dateFrom.getValue()); 
l_query.append("', t.creationdate AS '"  + m_dateTo.getValue()); 
l_query.append("' from tablename t").toString();
司寇旺
2023-03-14

您的查询有多个问题,主要是因为它不是有效的SQL。显示命名参数错误是因为日期值不在引号内,所以它正在解析它,并且由于分号< code>:而变得混乱。解决这个问题最简单的方法是对要连接的值使用引号< code>',并将它们转换为< code>DATE(我假设这是您想要的),用逗号< code >,替换< code >和,并在字符串连接之间添加空格。

师冥夜
2023-03-14

似乎您在第 2 行和第 3 行的关键词 AND 和 FROM 之前以及第 2 行的关键词 AS 之后缺少一些空格。

 类似资料:
  • 我得到这个例外: Java方法 public void getAllRevisions() {

  • 我在JPA 2.0中发现了非常奇怪的行为 我正在尝试构建一个看起来像这样的查询,其中 employeId 和 empDepartment 是通过 java 参数传递的长值。 但是上面的查询第一次不工作,它产生了上面的错误,但是当我第二次再次触发相同的方法时,一切都很顺利,每次都是这样,这是什么原因呢?

  • 我使用PostgreSQL和hibernate 我有这个功能: 运行我的项目后 我有这个错误: 当我运行这个查询时: 从decision中选择max(null(split_part(num_ordre_decision),“/”,3),”::int) 在数据库中我有正确的结果 例如,与数据库中的此类数据相关: 我有 1001 但我的问题和冬眠有关

  • 问题内容: 我想执行一个简单的本机查询,但是它不起作用: 为什么会出现此异常? 问题答案: JPA在本机查询中不支持命名参数,仅对于JPQL。您必须使用位置参数。 命名参数遵循第4.4.1节中定义的标识符规则。命名参数的使用适用于Java Persistence查询语言,而不是为本机查询定义的。 仅位置参数绑定可用于本机查询。 所以用这个 尽管JPA规范在本机查询中不支持命名参数,但某些JPA实现

  • 问题内容: 我想执行一个简单的本机查询,但是不起作用: 为什么会出现此异常? 问题答案: JPA在本机查询中不支持命名参数,仅对于JPQL。您必须使用位置参数。 命名参数遵循第4.4.1节中定义的标识符规则。命名参数的使用适用于Java Persistence查询语言,而不是为本机查询定义的。 仅位置参数绑定可用于本机查询。 所以用这个 尽管JPA规范在本机查询中不支持命名参数,但某些JPA实现(