无法从用户表中获取用户角色 =“经理角色”的所有位置

Posted

技术标签:

【中文标题】无法从用户表中获取用户角色 =“经理角色”的所有位置【英文标题】:Unable to fetch all where userRole = "ManagerRole" from users table 【发布时间】:2016-04-30 05:23:33 【问题描述】:

这是我的实体类。

@NamedQueries( @NamedQuery(name = UsersEntity.NAMED_QUERY_SELECT_ALL_BY_MANAGER_ROLE, 
                    query = "SELECT e FROM " + UsersEntity.ENTITY_NAME + " e WHERE e." + 
                                    UsersEntity.FIELD_NAME_USER_ROLE + " = '" +
                                    UsersVO.USER_ROLE + "'") )

@Column(name = "USER_ROLE", nullable = false, length = 30)
    private String userRole;
    public static final String FIELD_NAME_USER_ROLE = "userRole";

这是我执行查询的 java 类

@GET
@Path("/userrole")
@Produces( MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON )
public UsersListVO getUsers(@QueryParam("userRole") String userRole) 
 // public UsersListVO getUsers()
    System.out.println(">>>>>here");
    UsersListVO usersListVO = new UsersListVO();
    try 
        List<UsersEntity> usersEntityList = em.createNamedQuery(UsersEntity.NAMED_QUERY_SELECT_ALL_BY_MANAGER_ROLE, UsersEntity.class).setParameter(UsersEntity.FIELD_NAME_USER_ROLE, userRole).getResultList();

测试用例是:-

@Test
public void testGetUsers() 
    System.out.println("Start test ");
    UsersListVO usersListVO = baseWebTarget.path("userrole").queryParam("userRole", "AppSystemManagerUserRole").request(MediaType.APPLICATION_JSON).get(UsersListVO.class);
    if (usersListVO.getStatusType().equals(StatusTypeVO.FAILURE)) 
        Assert.fail(usersListVO.getMessage());
     else 
        System.out.println(usersListVO.getMessage());        
    

我想从 users 表中获取角色为 managerRole 的所有经理。但是在我的 jdeveloper 中执行测试用例时出错。我得到的错误是

java.lang.AssertionError: 你试图设置一个参数值 使用查询字符串中不存在的 userRole 名称 SELECT e FROM UsersEntity e WHERE e.userRole = 'AppSystemManagerUserRole'。

【问题讨论】:

请将您的代码精简到重现您的问题的最低限度。那么更有可能有人试图理解它。 @Heri 很抱歉,你现在可以检查一下吗。 您为什么要这样做?您所需要的只是用户的角色,或者特定用户是否具有特定角色。您需要一份经理名单来做什么? 我的 adf 中有一列只有经理批准了请求,所以我想通过命名查询填充该字段中的所有经理姓名 【参考方案1】:

错误

java.lang.AssertionError: You have attempted to set a parameter value using a name of userRole that does not exist in the query string SELECT e FROM UsersEntity e WHERE e.userRole = 'AppSystemManagerUserRole' 表示您正在尝试设置命名查询中不存在的参数。

您的命名查询:

query = "SELECT e FROM " + UsersEntity.ENTITY_NAME + " e WHERE e." + 
 UsersEntity.FIELD_NAME_USER_ROLE + " = '" + UsersVO.USER_ROLE + "'"

字符串连接后的结果:

query = "SELECT e FROM UsersEntity e WHERE e.userRole = 'AppSystemManagerUserRole'"

如您所见,没有可以设置的命名参数。当您尝试调用 setParameter(UsersEntity.FIELD_NAME_USER_ROLE, userRole) 时,它会抛出异常。

您需要在命名查询中引入如下命名参数,以便稍后在代码中设置。

query = "SELECT e FROM " + UsersEntity.ENTITY_NAME + " e WHERE e." + 
 UsersEntity.FIELD_NAME_USER_ROLE + " = :" + UsersEntity.FIELD_NAME_USER_ROLE

会导致

query = "SELECT e FROM UsersEntity e WHERE e.userRole = :userRole"

有了这个你应该能够设置参数并且应该可以工作。

【讨论】:

以上是关于无法从用户表中获取用户角色 =“经理角色”的所有位置的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何 PowerShell 脚本或命令可以从 Azure 门户获取租户中所有用户访问角色的报告?

从角色获取所有成员仅返回 Bot 和发送命令的用户 [重复]

REST 查询从解析服务器获取特定用户的所有角色

PMP:3.项目经理角色

从 AWS 组织导出所有 IAM 用户、角色和策略

Discord.js - 删除所有包含角色的用户的命令