java.lang.ClassCastException: java.lang.String не может быть приведен к com.security.model.UserRequest - PullRequest
0 голосов
/ 21 февраля 2019

Я извлекаю UserRequest объект из БД с использованием JPA-запроса следующим образом.

@Query("SELECT req.supervisorEmail from User u, UserRequest as req WHERE u.username = req.userRequestName and req.userRequestRole= '4' and u.active=true")
 public List<UserRequest> getSupervisorEmailIds();

Имею класс UserRequest POJO следующим образом.

public class UserRequest implements Identifiable<Long>, LazilyLoadable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonIgnore
private Long id;

@Column(name = "supervisor_email")
private String supervisorEmail;

@Column(name="user_request_name")
private String userRequestName;

@Column(name="user_request_role")
private String userRequestRole;

}

при попыткеперебирая объект UserRequest, я получаю ClassCastException для приведенного ниже кода.

List<UserRequest> supervisorEmailIds = userService.getSupervisorEmailIds();
for(UserRequest s: supervisorEmailIds) { // throwing exception on this line.
if(s!=null) {
System.out.println("Printing -->"+s.getSupervisorEmail());
}
System.out.println("Null error");
}

Ниже приводится ошибка, которую я получаю.

2019-02-22 00:34:26,719 [http-9191-1] ERROR         com.cat.pscs.api.controller.BaseController:  83 - Unhandled exception while processing request for URL : http://localhost:9191/security/users/get-supervisor-emailids with exception : java.lang.String cannot be cast to com.cat.pscs.security.model.UserRequest

java.lang.ClassCastException: java.lang.String нельзя преобразовать в com.cat.pscs.security.model.UserRequest в com.cat.pscs.security.controller.UserController.getSupervisorEmailIds (UserController.java:320)

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Внутри @Query вы написали

SELECT req.supervisorEmail from User u, UserRequest as req...

Полагаю, supervisorEmail - это VARCHAR или CHAR столбец таблицы.
Вы извлекаете только один столбец String.

Если вы хотите UserRequest (s), вам нужно

SELECT req from User u, UserRequest as req...
0 голосов
/ 21 февраля 2019

Ваш запрос возвращает список String, в то время как вы ожидаете получить список UserRequest.Изменение запроса следующим образом должно сделать работу:

@Query("SELECT req from User u, UserRequest as req WHERE u.username = req.userRequestName and req.userRequestRole= '4' and u.active=true")
0 голосов
/ 21 февраля 2019

Вы уверены, что нижняя строка возвращает UserRequestList?Я думаю, что он возвращает список строк

List<UserRequest> supervisorEmailIds = userService.getSupervisorEmailIds();

просто измените ваш SQL-запрос, который возвращает список объекта UserRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...