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您是否尝试了选择新方法?