반응형
새로운 프로젝트에서 Java 17, Spring Boot 3를 사용하고 있다.
기존에 Spring Boot 2에서는 발생하지 않던 에러가 발생해 기록해둔다.
에러 발생
JPA에서 네이티브 SQL 구현 중이었는데 (query, Attendance.class) 부분에 빨간 밑줄이 생기며 에러가 발생했다.
public List<Attendance> findAttendance(Long idx){
String queryStr = "SELECT ~~~ ";
queryStr += "FROM ~~~ ";
queryStr += "WHERE AI.IDX = :idx ";
queryStr += "GROUP BY DATE(BEGIN_DT)";
JpaResultMapper resultMapper = new JpaResultMapper();
Query query = em.createNativeQuery(queryStr);
query.setParameter("idx", idx);
return resultMapper.list(query, Attendance.class);
}
밑줄에 마우스 커서 갖다 대니 아래와 같은 얼럿창이 확인되었다.
애플리케이션을 구동하니 아래와 같이 떴다.
JpaResultMapper 클래스에 들어가보니 아래와 같은 문구가 떴다.
- Library source does not match the bytecode for class JpaResultMapper.
에러 원인
앞 부분에서 말했듯 프로젝트에 사용하고 있는 건 Java 17, Spring Boot 3.x이다.
Spring Boot 3에서는 Java EE에서 Jakarta EE로 전환이 되었다.
따라서 javax로 시작하는 패키지명은 jakarta로 변경해야 한다.
에러 해결
해당 문제를 해결하기 위해 이 사이트( GitHub - 72services/qlrm: Query Language Result Mapper )의 도움을 받았고 gradle을 수정했다.
dependencies {
...
// 수정 전
// implementation group: 'ch.simas.qlrm', name: 'qlrm', version: '1.7.1'
// 수정 후
// https://mvnrepository.com/artifact/org.qlrm/qlrm
implementation group: 'org.qlrm', name: 'qlrm', version: '4.0.1'
...
}
그룹 ID가 ch.simas.qlrm에서 org.qlrm으로 변경되었고 이를 반영해주면 된다.
또한, 버전 4.x.x의 QLRM에는 Jakarta Persistence이 필요하다고 적혀 있어, 해당 버전을 이용하면 Jakarta가 적용됨을 알 수 있다.
다음은 수정 후 빨간 글씨의 에러가 사라진 모습이다.
반응형