【问题标题】:Named parameter does not follow java identifier rules in MySQL/SQL/JPQL QueryMySQL/SQL/JPQL 查询中的命名参数不遵循 java 标识符规则
【发布时间】:2018-01-24 21:04:32
【问题描述】:

我想创建一个 JPQL 查询,该查询显示与登录用户在同一组中的用户列表

确实,我已经这样做了

public List<Utilisateur> getListUser(Long id) {
    return getEntityManager()
            .createQuery("SELECT u FROM Utilisateur u WHERE u.group.id =:" +id)
            .getResultList();
}

我的用户表如下

用户:id、姓名、电话、电子邮件、组...

组:id、名称、类型。

我获取当前用户组的方法

public Long currentIdGroup() {
    Utilisateur usere = EntityRealm.getUser();
    if (usere == null) {
        return null;
    }
    return EntityRealm.getUser().getGroup().getId();
}

Bean中列表的声明。

public List<Utilisateur> getListusersGroup() {
    return this.utilisateurService.getListUser(currentIdGroup());

}

但是,我在 glassfish 中遇到了这个错误

Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing [SELECT u FROM Utilisateur u WHERE u.group.id =:1]. [51, 53] The named input parameter ''{0}'' is not following the rules for a Java identifier.

提前感谢您的重要帮助。

给你很多东西。

【问题讨论】:

  • 去掉冒号

标签: java mysql jpa jpql


【解决方案1】:

尝试删除冒号:

.createQuery("SELECT u FROM Utilisateur u WHERE u.group.id =" +id)

理想情况下你应该使用:

.createQuery("SELECT u FROM Utilisateur u WHERE u.group.id =:param")

然后:

.setParameter("param", id);

避免 SQL 注入。

【讨论】:

  • 事实上我忘了说那个组是一个外键。像这个用户:id,name,tel,email,FK group_id,... Group:id,name,type。很抱歉。
  • 感谢 egallardo 的帮助。这是工作。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
相关资源
最近更新 更多