Не удалось получить все, где userRole = ManagerRole из таблицы пользователей

Это мой класс сущности.

@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());        
    }
}

Я хочу получить всех менеджеров, чьи роли являются managerRole, из таблицы пользователей. Но при выполнении тестового примера в моем jdeveloper возникла ошибка. Ошибка, которую я получил,

java.lang.AssertionError: Вы попытались установить значение параметра, используя имя userRole, которое не существует в строке запроса. SELECT e FROM UsersEntity e WHERE e.userRole = 'AppSystemManagerUserRole'.


person Sourabh Grover    schedule 23.01.2016    source источник
comment
Пожалуйста, сократите свой код до минимума, который воспроизводит вашу проблему. Тогда более вероятно, что кто-то попытается это понять.   -  person Heri    schedule 23.01.2016
comment
@Heri извините за это, вы можете проверить это сейчас.   -  person Sourabh Grover    schedule 24.01.2016
comment
Почему вы хотите это сделать? Все, что вам когда-либо понадобится, — это роли пользователя или то, находится ли конкретный пользователь в определенной роли. Для чего нужен список менеджеров?   -  person user207421    schedule 24.01.2016
comment
в моем объявлении есть столбец, в котором только менеджеры одобрили запрос, поэтому я хочу заполнить все имена менеджеров в этом файле через именованный запрос   -  person Sourabh Grover    schedule 24.01.2016


Ответы (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"

При этом вы должны иметь возможность установить параметр и должны работать.

person Madhusudana Reddy Sunnapu    schedule 24.01.2016