Spring Batch : JDBC Reader Id값 맵핑 안될 때

    JDBC 계열 Reader로 조회를 했을 때, 다른 값은 다 제대로 달라붙는데 ID만 제대로 달라붙지 않는 경우를 드디어 해결했다. 

    @Builder
    @Entity
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Customer {
    
        @Id
        @GeneratedValue
        @Column(name = "customer_id")
        private Long id;
        private String firstName;
        private String lastName;
        private LocalDate birthDate;
    
    
    }

    JPA를 위해서 다음과 같이 셋팅을 했다고 가정해보자. 이 때, DB의 Column 명은 customer_id인데, 객체의 필드는 id다. 그런데 이 때 JdbcItemReader를 다음과 같이 불러온다고 해보자.

     

            return new JdbcPagingItemReaderBuilder<Customer>()
                    .name("pagingBuilder")
                    .dataSource(dataSource)
                    .fetchSize(1000)
                    .beanRowMapper(Customer.class)
                    .selectClause("customer_id, first_name, last_name, birth_date")
                    .fromClause("from customer")
                    .sortKeys(sortKeys)
                    .build();

    JDBC는 DB를 기준으로 조회해오기 때문에 DB의 컬럼명을 전달해줘야한다. 즉, Customer_id로 조회를 해서 값을 가져오게 된다. 그런데 문제는 파라미터를 바인딩 하는 시점에서 일어난다. 왜냐하면, Customer 객체는 id를 가지고 있고, 불러온 값은 customer_id이기 때문에 사실 맵핑되는게 없다. 

    .selectClause("customer_id as id, first_name, last_name, birth_date")

    이런 경우 다음과 같이 해결하면 된다. 불러온 값을 SQL의 as문을 이용해서 id로 바꿔주는 것이다. 

    댓글

    Designed by JB FACTORY