java - @NamedNativeQuery + @SqlResultSetMapping + @ConstructorResult + @ColumnResult 导致 classCastException

标签 java spring hibernate jpa

我想从表中选择特定列并将结果存储到非实体 POJO。

我的实体类:

@Entity
@Table(name = "CUSTOMER")
@NamedNativeQuery(name = "findSampleMapping", 
    query = "SELECT CUSTOMER_ID, NAME, REG_TIMESTAMP FROM CUSTOMER where CUSTOMER_ID = ?1", resultSetMapping = "SampleMapping")
@SqlResultSetMapping(name="SampleMapping",
classes = {
 @ConstructorResult(targetClass = com.entity.Sample.class,
   columns = {@ColumnResult(name="customerId"), @ColumnResult(name="name"), @ColumnResult(name="regTimeStamp")}
 )}
)
public class CustomerEntity {

    @Id
    @Column(name = "CUSTOMER_ID")
    private String customerId;

    @Column(name = "NAME")
    private String name;

    @Column(name = "FIRST_NAME")
    private String firstName;

   @Column(name = "LAST_NAME")
    private String lastName;

   @Column(name = "REG_TIMESTAMP ")
    private String regTimeStamp;
}

非实体 POJO:

import java.sql.Timestamp;

    public class Sample {

        private String customerId;
        private String name;
        private TimeStamp regTimeStamp;

        public Sample(String customerId, String name, TimeStamp regTimeStamp){
            this.customerId = customerId;
            this.name = name;
            this.regTimeStamp= regTimeStamp;
        }

        public String getCustomerId() {
            return customerId;
        }
        public void setCustomerId(String customerId) {
            this.customerId = customerId;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getRegTimeStamp() {
            return regTimeStamp;
        }
        public void setRegTimeStamp(String regTimeStamp) {
            this.regTimeStamp= regTimeStamp;
        }

    }

调用:

Query q = em.createNamedQuery("findSampleMapping");
q.setParameter(1, "1");
@SuppressWarnings("unchecked")
List<Sample> list = q.getResultList();

   for (Sample row : list) {
    System.out.println(row.getCustomerId());
   }

当我尝试循环并获取值时,我在 for 循环 Ljava.lang.Object 中得到 classCastException;无法转换为 com.entity.Sample

最佳答案

List<Sample> list = q.setResultTransformer(Transformers.aliasToBean(Sample.class)).getResultList();

关于java - @NamedNativeQuery + @SqlResultSetMapping + @ConstructorResult + @ColumnResult 导致 classCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123238/

相关文章:

java - Spring 配置: component-scan

java - Spring Boot/MVC/Tomcat长时间运行报错: Whitelabel Error Page

java - Spring Boot配置-2配置LDAP-Yml文件

java - Atomikos:使用 PostgreSQL 时数据未保存

java - 为什么我的计划作业没有并行执行

java - Surefire 由于检查是否在 junit 测试之一中调用了 System.exit() 而失败

java - 通过 Android HOME 按钮从 Activity B->A 返回不会恢复 Intent

java - HSQLDB:内存表和数据丢失

java - Eclipse 无法写入 ./launch

java - 如何在基于 JAVA 的 spring config 中配置 Hibernate Db 连接设置