Table of Contents
SqlPagingQueryProviderFactoryBean join 버그
Spring Batch 버전에 따라,
join 또는 left join 사용시 컬럼을 인식하지 못하는 버그가 있다.
열 이름 e.itemid이(가) 잘못되었습니다.
public PagingQueryProvider createQueryProviderForInsert() throws Exception {
SqlPagingQueryProviderFactoryBean queryProviderFactoryBean = new SqlPagingQueryProviderFactoryBean();
queryProviderFactoryBean.setDataSource(dataSource);
queryProviderFactoryBean.setSelectClause("select e.*");
queryProviderFactoryBean.setFromClause("from db_test.dbo.tbl_test e left outer join db_test.dbo.tbl_test_transfer t on e.itemid = t.itemid");
queryProviderFactoryBean.setWhereClause("where t.itemid is NULL");
// 열 이름 e.itemid이(가) 잘못되었습니다.
queryProviderFactoryBean.setSortKey("e.itemid");
return queryProviderFactoryBean.getObject();
}
이런 경우 아래처럼 필요한 컬럼의 alias 를 추가로 생성해 주면 버그를 해결할 수 있다.
public PagingQueryProvider createQueryProviderForInsert() throws Exception {
SqlPagingQueryProviderFactoryBean queryProviderFactoryBean = new SqlPagingQueryProviderFactoryBean();
queryProviderFactoryBean.setDataSource(dataSource);
queryProviderFactoryBean.setSelectClause("select e.*, e.itemid as itemid1");
queryProviderFactoryBean.setFromClause("from db_test.dbo.tbl_test e left outer join db_test.dbo.tbl_test_transfer t on e.itemid = t.itemid");
queryProviderFactoryBean.setWhereClause("where t.itemid is NULL");
queryProviderFactoryBean.setSortKey("itemid1");
return queryProviderFactoryBean.getObject();
}