SqlPagingQueryProviderFactoryBean join 버그

By | 2022년 9월 22일
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();
    }

답글 남기기