kotlin을 이용해 아주 잘 쓰고 있었다. 그런데, jpa를 만나기 전까지는 그랬다.
Entity를 어떻게 구성 할까 하다 늘 고민이 있었다.
Data class로 쓰다가, Class로 쓰다가~ 이것 저것 하다가 id만 불변으로 설정 하자.
@Entity
@Table(name = "target")
class Target(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
val id: Long = 0,
) {
// 기타 코드
}
id를 불변으로 처리 하니, 바뀔 일은 없겠지! 하는 순간, 문제가 발생 한다.
Jpa 관련 된 ItemReader의 경우에는 id를 정상적으로 잘 가져오지만,
@Bean
@StepScope
fun targetItemReader(
@Value("#{jobParameters['id']}") id: Long,
): JdbcPagingItemReader<Target> {
return JdbcPagingItemReaderBuilder<Target>()
.name("targetItemReader")
.dataSource(secondaryDataSource)
.queryProvider(queryProvider(id))
.rowMapper(BeanPropertyRowMapper(Target::class.java))
.pageSize(1000)
.build()
}
보통 위처럼 이렇게 쓰게 될텐데, Jdbc 관련 된 ItemReader의 경우에는 id 값이 0으로 고정 된다.
그렇기때문에, var id 로 바꿔주거나, jpa 관련 ItemReader를 쓰는게 좋겠다. 그것도 아니면, rowMapper를 Custom으로 생성 해서 활용 하는 방법이 있는데, 개발자마다 인지 하고 있어야 하는 이슈이다 보니, var 로 통일 하는게 맞을 것 같다.
사실, 이슈 없게 하려면, var id가 맞는 것 같은데.... (아~뭔가 kotlin 느낌이 아니다)
혹시 깔끔하게 해결하는 방법을 아시는 분 계신다면, 댓글로 가르침 부탁드립니다.
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
Rest API와 Grpc API 서버를 하나로 서비스 할 수 있다고?! (5) | 2024.08.28 |
---|---|
kotlin - jackson 관련 이슈 (토비의 스프링 6 강의) (0) | 2024.07.05 |
ktlint lint 적용 (0) | 2024.02.08 |
kotest 관련 @Transactional rollback 안되는 이슈 (0) | 2023.12.14 |
Kapt 관련 오류시 참조 (superclass access check failed) (2) | 2023.12.08 |