【发布时间】:2014-11-12 12:20:56
【问题描述】:
我正在使用spring-batch 和JpaPagingItemReader<T> 将数据库读取到@Entity。
实体被正确指定为类型参数T。
问题:返回的结果集类型不是T,而是一个对象数组:Object[]。该数组本身中的每个对象都是一个 Object[] 数组,具有以下内容:[firstname, lastname, date]。
因此,数据库列以某种方式编写为字符串数组,而实体显然返回为String[] 数组。
原因是我的查询:
SELECT firstname, lastname, min(date) FROM mytable GROUP BY firstname, lastname;
所以读取器映射到一个字符串数组。我怎样才能映射到我的@Entity,可能只填充选择中请求的字段?
我的读者定义:
JpaPagingItemReader<MyEntity> reader = new JpaPagingItemReader<>();
reader.setEntityManagerFactory(emf);
reader.setQueryString(QUERY);
@Entity
public class MyEntity {
private String firstname, lastname;
private Date date;
public MyEntity(String firstname, String lastname, Date date) {
this.firstname = firstname;
this.lastname = lastname;
this.date = date;
}
}
【问题讨论】:
-
你能展示你的 bean reader 定义吗?
-
抱歉忘了添加我的查询,这可能是原因...
-
这不是将 JPQL 与 JpaPagingItemReader 一起使用吗?添加了上面的阅读器定义。来自文档:
It executes the JPQL {@link #setQueryString(String)} to retrieve requested * data. -
我认为,如果您想保持查询不变但又想返回一个对象,则必须创建一个 POJO,其构造函数接受 (String, String, Date) (但不会你的实体)。
-
嗯好吧,这不是我想要的。如何重写查询以使其返回实体?
标签: java spring jpa spring-batch