我使用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,可能只填充了select中所要求的字段?
我的读者定义:
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;
}
}发布于 2014-09-18 08:45:53
尝尝这个
SELECT m FROM mytable m GROUP BY m.firstname, m.lastname;这将返回您的实体。
下面是定义读者的声明性方法的一个示例:
<beans:bean id="myreader"
class="org.springframework.batch.item.database.JpaPagingItemReader">
<beans:property name="queryString"
value="SELECT m FROM mytable m GROUP BY m.firstname, m.lastname" />
<beans:property name="entityManagerFactory" ref="entityManagerFactory" />
</beans:bean>编辑
在M.Deinum注释中,您应该能够使用以下内容:
SELECT new com.myproject.model.MyEntity(firstname, lastname, min(date)) FROM mytable GROUP BY firstname, lastnamehttps://stackoverflow.com/questions/25907931
复制相似问题