java - 如何防止 JPA 实体出现 ClassCastException?

标签 java database hibernate jpa orm

尝试查询 JPA 实体类时出现 ClassCastException。我只希望 json 显示两列。那就是姓名和地址。如何在 JPA 中仅显示选定的列?从调试来看,肯定是for循环。所以 List 是对象,我需要将右侧设置为对象而不是列表,正确吗?

实体

@Entity
@Table(name = "Personnel")
public class User implements Serializable {

private String id;
private String name;
private String address;

public User(String id, String name, String address) 
{
this.id = id;
this.name = name;
this.address = address;
}

@Id
@Column(name = "name", unique = true, nullable = false)
public String getName() {
    return this.name;
}....
 //setters getters

查询/实现

public List<User> getRecords(User ent){

     String sql = "select "
                + " usr.name, usr.address "                 
                + " from User usr"           
                + " where usr.id = '1' ";

    List<User> records = this.getSession().createQuery(sql).list();
    for ( User event : records ) {
        System.out.println( "Records (" + event.getName + ") );
    }

    return records;
 }

更新

这是我尝试将结果对象声明为 List。该方法是否必须是对象而不是?

public List<User> getRecords(User ent){
     String sql = "select "
                + " usr.name, usr.address "                 
                + " from User usr"           
                + " where usr.id = '1' ";

       Map<String, String> results = new HashMap<String, String>();
       List<Object[]> resultList = this.getSession().createQuery(sql).list();

       // Place results in map
       for (Object[] items: resultList) {
          results.put((String)items[0], (String)items[1]);
          results.toString();
       }
       return (List<User>) results;

最佳答案

您可以将 DTO 类传递给 SELECT 子句,如下所示:

List<UserDTO> resultList = this.getSession().createQuery("""
    select
        new my.package.UserDTO(usr.name, usr.address)
    from User usr
    where usr.id = :userId
    """)
.setParameter("userId", userId)
.getResultList();

关于java - 如何防止 JPA 实体出现 ClassCastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034490/

相关文章:

java - Spring JMS ActiveMQ 跟踪作业状态

返回多个 RDD 的 Java Spark 映射步骤

MySQL乘法

mysql - 如何针对单个父表设计多个子表?

java - 提交表单后返回上一页(Spring/Hibernate)

java - 使用 FOP 生成 SVG 不起作用

Java3d : Texture is not applied to OBJ model properly

mysql - Grails 删除孤儿多对多关系

java - Hibernate - 在同一事务中使用 getNamedQuery 保存和插入

java - Hibernate 编译问题