【问题标题】:java.lang.ClassCastException: java.lang.String cannot be cast to com.security.model.UserRequestjava.lang.ClassCastException:java.lang.String 无法转换为 com.security.model.UserRequest
【发布时间】:2019-02-21 19:32:06
【问题描述】:

我正在使用 JPA Query 从 DB 中检索 UserRequest 对象,如下所示。

@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)

【问题讨论】:

    标签: java jpa


    【解决方案1】:

    您确定下面的行返回 UserRequestList 吗?我认为它返回字符串列表

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

    只需更改返回 UserRequest 对象列表的 sql 查询。

    【讨论】:

      【解决方案2】:

      您的查询返回String 的列表,而您希望得到UserRequest 的列表。如下更改查询应该可以完成这项工作:

      @Query("SELECT req from User u, UserRequest as req WHERE u.username = req.userRequestName and req.userRequestRole= '4' and u.active=true")
      

      【讨论】:

        【解决方案3】:

        在你写的@Query里面

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

        我想supervisorEmailVARCHARCHAR 表列。
        您只提取了一个 String 列。

        如果你想要UserRequest(s),你需要

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

        【讨论】:

          猜你喜欢
          • 2013-07-25
          • 2021-08-04
          • 2016-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多