我研究了:col_1_1001
应该是某种命名参数或主机变量(DB2),但没有找到类似的示例来说明我正在尝试的操作。我只使用过?1
来使用@query
来设置一个参数,据我所知,这个参数是针对JPQL的。因为我在这里尝试的是本机SQL查询,所以不确定这是否可以工作。
@Repository
public interface SomeRepository extends JpaRepository<Entity, EntityID> {
@Query(value="SELECT COL_1"
+ ",COL_2"
+ ",COL_3"
+ "FROM TABLE_A"
+ "WHERE COL_1 = :COL_1_1001", nativeQuery = true)
List<Entity> getEntityDetails();
}
[错误]~2019-09-19-07.26.30.347 CDT~~~~O.A.C.C.C.[.[.[.[.[dispatcherServlet]servlet.Service()在路径为[]的上下文中引发异常[请求处理失败;嵌套异常为org.SpringFramework.dao.InvalidDataAccessResourceUsageException:命名参数未绑定:COL;嵌套异常为org.Hibernate.QueryException:命名参数未绑定:COL;根原因为org.Hibernate.QueryException:命名参数未绑定:COL]
您在查询中使用了变量col_1_1001
但没有提供它。您必须添加一个带有@param
注释的参数,以便将值注入到查询中。
更改:
@Query(value="SELECT COL_1"
+ ",COL_2"
+ ",COL_3"
+ "FROM TABLE_A"
+ "WHERE COL_1 = :COL_1_1001", nativeQuery = true)
List<Entity> getEntityDetails();
致:
@Query(value="SELECT COL_1"
+ ",COL_2"
+ ",COL_3"
+ "FROM TABLE_A"
+ "WHERE COL_1 = :col", nativeQuery = true)
List<Entity> getEntityDetails(@Param("col") String col); // it may not be a string - use the actual tyle of COL_1
问题内容: 我对Hibernate Native Query有问题。我有一个选择,它选择数组切片(PostgreSQL数据库)。 问题在于hibernate状态识别以下部分:来自“ SELECT my_array [1:300] …”的“:300”作为命名参数,并且我得到以下异常:尚未设置所有命名参数。 我试图用’:’,’::’逃脱冒号(:),但没有成功。 Hibernate版本是3.2 问题答案
我有一个疑问 但是在使用hibernate执行查询时,我收到 org.hibernate.QueryParameterException:无法定位命名参数[age] 怎么了?
问题内容: 我们正在尝试为本地sql查询动态生成IN子句以返回JPA实体。Hibernate是我们的JPA提供程序。我们的代码看起来像这样。 这是行不通的,in子句无法识别通过这种方式传入的任何值。有谁知道解决这个问题的方法吗? 问题答案: 在您的情况下,JPA支持命名列表参数:
可以在映射文档中定义查询的名字,然后就可以象调用一个命名的 HQL 查询一样直接调用命名 SQL 查询.在这种情况下,我们不 需要调用 addEntity() 方法。 <sql-query name="persons"> <return alias="person" class="eg.Person"/> SELECT person.NAME AS {person.name},
问题内容: 我想执行一个简单的本机查询,但是它不起作用: 为什么会出现此异常? 问题答案: JPA在本机查询中不支持命名参数,仅对于JPQL。您必须使用位置参数。 命名参数遵循第4.4.1节中定义的标识符规则。命名参数的使用适用于Java Persistence查询语言,而不是为本机查询定义的。 仅位置参数绑定可用于本机查询。 所以用这个 尽管JPA规范在本机查询中不支持命名参数,但某些JPA实现
为什么我会得到这个例外?