잘 정리해보자
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
[Ljava.lang.Object; cannot be cast to
I want to get value from the database, in my case I use List to get the value from the database but I got this error Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; c...
stackoverflow.com
https://jojoldu.tistory.com/337
Spring Batch Paging Reader 사용시 같은 조건의 데이터를 읽고 수정할때 문제
안녕하세요. 이번 시간에는 Spring Batch를 사용하시는 분들이 자주 묻는 질문 중 하나인 같은 조건의 데이터를 읽고 수정할때 어떻게 해야하는지 에 대해서 소개드리려고 합니다. 모든 코드는 Githu
jojoldu.tistory.com
'Spring > JPA' 카테고리의 다른 글
JPA Error - No property findComplete found for type (0) | 2022.02.21 |
---|---|
JPA 설정과 시작 (0) | 2022.02.03 |