티스토리 뷰
SW개발/Hibernate
Hibernate / java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
개소왕 2018. 6. 7. 17:03Session s= getSession();
Criteria c = s.createCriteria(CiClst.class);
c.add(Restrictions.in("clrId", clrIds));
List<CiClst> r = c.list();
s.close();
java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
* 원인
clrIds 가 Hibernate - SQL 통해 가져온 리스트였고, SQLQuery 통해 가져온 것.
- (Criteria나 Query 가 아닌... ) SQLQuery 로 가져올 경우 Long 이 아닌 BigInteger 로 가져오게 됨.
- 이걸 Long 으로 바꿔서 리스트에 넣었어야 했는데, 그렇지 않음.
- List를 제너릭 없이 쓰다보니 List<Long>에 사실상 List<BigInteger> 가 들어가 있었고,
- Restrictions.in(...) 에서 해당 오류 발생한것...
* 해결
clrIds 가져올때
SQLQuery#addScalar() 하든지
list() 결과값을 직접 캐스팅 하든지...