无法将参数传递给HQL查询

时间:2018-04-16 19:59:59

标签: java hibernate hql

在尝试为我的应用创建API时,我尝试创建一个传入值的查询,然后从db返回响应。

@Query(value = "SELECT u FROM User u WHERE u.userID = ?")
User getUserById(String id);

我在其他项目中以这种方式创建了查询,但无法弄清楚为什么我在这个项目中出现以下错误

JDBC style parameters (?) are not supported for JPA queries.

5 个答案:

答案 0 :(得分:4)

你尝试过这个:

@Query(value = "SELECT u FROM User u WHERE u.userID  = :id")
User getUserById(String id);

答案 1 :(得分:1)

Legacy-style query parameters (`?`) are no longer supported;

这是因为休眠不为占位符(?)提供支持,您需要将代码更改为在休眠中使用named parameters的代码。

有效。

@Query(value = "SELECT u FROM User u WHERE u.userID = :inputUserId")
User getUserById(String inputUserId);

:inputUserId // named parameter

以下是避免使用占位符(?)的原因。

  

弃用Hibernate特定的(JDBC样式)位置参数   JPA风格的支持。

答案 2 :(得分:0)

使用 positioning 参数

XML 方法在HQL中遇到相同的问题

异常:不再支持旧式查询参数(?

enter image description here

HQL查询

String hql = "from Customer cust where cust.city=?";

解决方案:如下更改hql查询

String hql = "from Customer cust where cust.city=?0";

然后我们开始!

答案 3 :(得分:0)

String hql = "from Customer cust where cust.city= :city";
Query<Customer> query = session.createQuery(hql,Customer.Class);
query.setParameter("city",id);//here id is your value

答案 4 :(得分:0)

我提供了两个有关如何在休眠状态下编写参数化查询的示例。

{{1}}