【问题标题】:Convert a silmple Mysql to JPQL Queries将简单的 Mysql 转换为 JPQL 查询
【发布时间】:2017-12-19 15:29:33
【问题描述】:

大家早上好,在四处寻找之后,我来找你们寻求帮助。 所以我有一个这个 mysql 查询

SELECT * FROM USER WHERE WORPLACE ='TECHNICIAN',

这是我的 JQPL 查询

SELECT U FROM USER U WHERE U.WORPLACE =:+TECHNICIAN

但是我如何在 Glassfish 上得到这个错误

java.lang.IllegalStateException: Query argument Technician not found in the list of parameters provided during query execution.

这是我在托管 Bean 上的数组列表的代码

public List<Users> getListUsers() {
    return this.userService.getTechnicians("Technician");
}

那么,我具体想要什么。我想要一个可以在工作场所为“技术员”的用户表列表中排序的查询。

感谢您的帮助,祝您有美好的一天。

【问题讨论】:

  • 什么是“:+TECHNICIAN”?命名参数前面有冒号。但是 + 号在做什么呢?谁知道这个“getTechnicians”方法是什么......
  • 抱歉,getTechnicians 是调用查询 'SELECT U FROM USER U WHERE U.WORPLACE =:+TECHNICIAN' TECHNICIAN 的方法,它是我许多工作场所中使用保存方法的方法跨度>
  • 您是否尝试删除 jpql 查询上的 + 号?
  • 所以发布该方法的代码
  • 当我尝试删除“+”时,这会向我发送一个合成错误。 public List getTechnicians(String Technician) { return getEntityManager() .createQuery("SELECT u FROM User u WHERE u.poste =:"+ Technician) .getResultList(); .这是完整的查询。这似乎没有错误。但无论如何 glassfish 给我发了一个 java.lang.IllegalStateException: Query 参数。我很困惑

标签: mysql jpa jpql


【解决方案1】:

在 JPQL 中,命名查询参数以 : 开头,后跟名称。因此,如果您想调用查询参数Technician,您需要在查询中将其引用为:Technician

然后您可以使用参数名称及其值在Query 接口上调用setParameter 方法。

这是一个使用您的查询的示例:

public List<User> getTechnicians(String technician) { 
   TypedQuery<User> q = getEntityManager().createQuery("SELECT u FROM User u WHERE u.poste =:Technician", User.class );
   q.setParameter("Technician", technician);
   return q.getResultList(); 
}

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2015-02-20
    • 2021-10-09
    • 2011-06-12
    • 2019-07-13
    相关资源
    最近更新 更多