잘 정리해보자
JPA Error : [Ljava.lang.Object; cannot be cast to 본문
에러메시지 :
[Ljava.lang.Object; cannot be cast to ..
원인 :
query로 entity를 가져와 형변환 하는 경우 발생.
JPA에서 native query로 데이터를 가져올 때 흔히 발생하는 에러라고 한다.
반환 타입은 Object[]이며, entity 결과값을 String[]이 아닌 object[]로 받아오는 과정에 형변환 에러.
현재 상황은 배치에서 JPA User로 받아오고 처리하는 과정의 cast에러 발생 케이스이다.
reader
private ItemReader<User> reader1() throws Exception{
JpaPagingItemReader<User> reader = new JpaPagingItemReaderBuilder<User>()
.pageSize(chunkSize)
.entityManagerFactory(entityManagerFactory)
.queryString("select id,username from User")
.name("getTargetReader")
.build();
..
}
writer -> cast 에러
private ItemWriter<User> excelWriter1() {
return items -> {
for(User item : items){
}
}
User Entity로 writer 받는 과정에, List<User>로 받는줄 알고 for문을 사용했지만, object 형변환 에러가 발생했다.
해결 :
List<Object[]> 를 iterator로 접근해서 Object[] 으로 형변환해서 사용했다.
private ItemWriter<User> excelWriter1() {
return items -> {
Iterator iter = items.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
//obj[0].toString()
...
}
};
}
Object[] 값은 [데이터1, 데이터2, ...] 이런 형태라서 [index]로 접근해서 .to형변환으로 사용.
참고 :
- 원인 설명 : https://www.baeldung.com/jpa-error-java-lang-string-cannot-be-cast
https://stackoverflow.com/questions/20486641/ljava-lang-object-cannot-be-cast-to
https://jojoldu.tistory.com/337
'Spring > JPA' 카테고리의 다른 글
JPA Error - No property findComplete found for type (0) | 2022.02.21 |
---|---|
JPA 설정과 시작 (0) | 2022.02.03 |
Comments