我想使用spring-batch从postgres数据库中检索和处理数据。

我有一条有效的SQL语句,它将给我完整的结果集(约40万个条目):

private static final String QUERY = "SELECT * FROM MyDataTable ";

现在,我想使用JpaPagingItemReader以便以块的形式获取(并将数据写入其他位置):

JpaPagingItemReader<MyEntity> reader = new JpaPagingItemReader<>();
reader.setEntityManagerFactory(emf);
reader.setQueryString(QUERY);


但这不起作用:

[] 2014-09-17 16:31:58,234 ERROR : QuerySyntaxException: unexpected token: * near line 1, column 8 [SELECT * FROM my_data_table]


我也试过SELECT FROM MyDataTableSELECT m FROM MyDataTable m没有星号。结果相同。
那么,如何使用spring-batch执行该hql查询?

顺便说一句:该查询在pgAdmin之类的sql编辑器中运行良好。

最佳答案

SELECT m FROM MyDataTable m几乎是正确的(只要您有实体调用JPQL,它就是有效的MyDataTable查询)。因此,似乎您没有名为MyDataTable的实体类。

由于JpaPagingItemReader#setQueryString(String)接受JPQL查询,因此您应确保该表具有实体类,然后应使用其名称代替MyDataTable

顺便说一句-对于HQL查询,有HibernatePagingItemReader

09-03 18:03