Spring Batch : JDBC Reader Id값 맵핑 안될 때
- 프로그래밍 삽질/디버깅
- 2022. 3. 19.
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로 바꿔주는 것이다.
'프로그래밍 삽질 > 디버깅' 카테고리의 다른 글
Spring Batch : JpaItemReader + @StepScope NullPointException (0) | 2022.03.19 |
---|---|
No serializer found for class 에러 상황 (0) | 2022.01.17 |
@RequestBody 바인딩이 안될 때 (0) | 2022.01.15 |
Spring MVC : View 랜더링이 안될 때 (0) | 2022.01.11 |
JPA : NullPointerException이 뜰 때 (0) | 2022.01.11 |