Java 如何将查询结果集映射到表以外的其他实体

Java 如何将查询结果集映射到表以外的其他实体,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,我试图从数据库中获取数据并将其映射到不同的实体,但我得到了 java.lang.IllegalArgumentException: java.lang.ArrayIndexOutOfBoundsException: 0 我的桌子看起来像 @Entity @Table(name = "Student") @NamedNativeQueries({ @NamedNativeQuery(name = "findAll", query = "Select a.student_id as id,

我试图从数据库中获取数据并将其映射到不同的实体,但我得到了

java.lang.IllegalArgumentException: java.lang.ArrayIndexOutOfBoundsException: 0
我的桌子看起来像

@Entity
@Table(name = "Student")
@NamedNativeQueries({
    @NamedNativeQuery(name = "findAll", query = "Select a.student_id as id, a.student_code as code from Student a")
    })
public class Student {

    @Id
    private Long student_id;
    private String student_code;
    private String student_user_id;
    private String student_first_name;

    //Some other fields, getters and setters
}
@Entity
public class Generic{

    @Id
    private Long id;
    private String code;
    private String user_id;

    //getters and setters
}

我的BO看起来像

@Entity
@Table(name = "Student")
@NamedNativeQueries({
    @NamedNativeQuery(name = "findAll", query = "Select a.student_id as id, a.student_code as code from Student a")
    })
public class Student {

    @Id
    private Long student_id;
    private String student_code;
    private String student_user_id;
    private String student_first_name;

    //Some other fields, getters and setters
}
@Entity
public class Generic{

    @Id
    private Long id;
    private String code;
    private String user_id;

    //getters and setters
}

我的DAO把这个类称为

Query query = entityManager.createNamedQuery("findAll", Generic.class);
query.getResultList();
我有例外

entityManager.createNamedQuery("findAll", Generic.class);
这是我的堆栈跟踪

    Caused by: java.lang.IllegalArgumentException: java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.internal.AbstractSharedSessionContract.buildQueryFromName(AbstractSharedSessionContract.java:774)
at org.hibernate.internal.AbstractSharedSessionContract.createNamedQuery(AbstractSharedSessionContract.java:869)
at org.hibernate.internal.AbstractSessionImpl.createNamedQuery(AbstractSessionImpl.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:301)
at com.sun.proxy.$Proxy157.createNamedQuery(Unknown Source)
我试图从数据库中获取数据并将其映射到另一个实体 但是我得到了
ArrayIndexOutOfBoundsException

但在下一行中,您并没有这样做,而是试图获取
Student
实体列表的列表。你在这里的不同实体是什么

entityManager.createNamedQuery(“findAll”,Student.class)

但是,由于您提供了另一个实体
Generic
,我假设您希望在其中加载数据。这个问题有不同的可能解决方案。让我们想想

使用选择新的关键字 将本机查询更新到此位置

@NamedNativeQueries({
    @NamedNativeQuery(name = "Student.findAll", query = "SELECT NEW Generic(a.student_id, a.student_code) FROM Student a")
})
您还必须在
Generic
类中定义一个限定此调用的构造函数

public void Generic(Long id, String code) {
     this.id = id;
     this.code = code;
}
并将DAO中的查询执行更新为

List<Generic> results = em.createNamedQuery("Student.findAll" , Generic.class).getResultList();

你能简要介绍一下这个异常跟踪吗?你有pojo类中的构造函数接受这两个变量吗?a.student\u id作为id,a.student\u code哪个
hibernate orm
你正在使用的版本?我试过这个。但我有一个例外,就是Student.Student_id是BigDecimal,Generic.id是long。我可以在不更改数据类型的情况下执行类型转换吗?实际上,您需要将其转换为
BigDecimal
。查看更新后的答案是否有一种方法可以直接在命名本机查询中执行,我正在避免使用objectsDid您是否尝试了
选择新
方法?