강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

IK P님의 프로필 이미지
IK P

작성한 질문수

네이티브 쿼리에 대한 컬럼명 조회

작성

·

282

·

수정됨

0

제가 하려는 것은 클라이언트로부터 select 쿼리문이 날아오면 조회해서 반환하는 기능을 구현하고 있습니다.
리스트 형식으로 반환할때 결과값만 반환하지 않고 json 으로 컬렴명 : 결과값 형식으로 반환하고 싶습니다.
하지만 컬렴명을 가져오는 것에서 막혀서 진행이 안 되고 있습니다. 어떻게 하면 entity manager에서 컬럼명을 가져 올 수 있을까요 ?

다음은 repository 클래스 코드 입니다 .

    public ArrayList<Object> multiSelectQuery(String queryStr){
        try {
            Query query = em.createNativeQuery(queryStr);
            return (ArrayList<Object>)query.getResultList();
        }catch (Exception e){
            return null;
        }
    }//컬럼명 없이 native query 조회하는 코드 

 

query = entityManager.createNativeQuery(sql);
List<Object[]> result = query.getResultList();
ResultSet resultSet = query.unwrap(java.sql.ResultSet.class);
ResultSetMetaData metaData = resultSet.getMetaData();

for (int i = 1; i <= metaData.getColumnCount(); i++) {
    String columnName = metaData.getColumnName(i);
    System.out.println("Column " + i + ": " + columnName);
}

위 코드는 제가 시도해본 것. (Exception error (Could not unwrap this) 발생합니다.)

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 문제를 해결하기 위해서는 ResultSet에서 컬럼 명을 가져오는 방법이 필요하나, EntityManager의 createNativeQuery로 반환받은 Query 객체에서는 직접적으로 ResultSet을 얻어내는 것이 지원되지 않습니다. 일반적으로 JPA를 사용할 때는 entity와 매핑하여 결과를 가져오지만, 컬럼명과 값을 직접 가져오고 싶으시다면 JPA가 아닌 순수 JDBC의 Connection, PreparedStatement 그리고 ResultSet을 사용하여 구현해야 합니다.

그러나 직접적으로 JDBC API를 사용하는 대신 Query 객체를 unwrap 메서드를 통해 원하는 타입으로 변환하는 방법을 사용하고 계신 것 같은데, Hibernate를 사용하는 경우에는 아래와 같은 방식으로 해결이 가능합니다.

List<Object[]> results = entityManager.createNativeQuery(sql).getResultList();
entityManager.createNativeQuery(sql).unwrap(org.hibernate.query.Query.class).getResultStream().forEach(row -> {
    Object[] rowArray = (Object[]) row;
    for (Object columnValue : rowArray) {
        // 여기서 columnValue를 적절히 처리합니다.
    }
});

위의 코드는 Hibernate의 Query를 사용하여 각 행의 값을 순회하는 예시이므로, 앞서 언급했듯이 Hibernate가 아닌 다른 JPA 구현체를 사용하는 경우 해당 방식으로는 작동하지 않을 수 있습니다.

참고하셔서 문제를 해결하시길 바랍니다.

IK P님의 프로필 이미지
IK P
질문자

답변감사합니다. 결국 JdbcTemplate 써서 해결은 했네요 .... unwrap저건 자꾸 빨간 밑줄나오고 마지막에 하긴 했어도 조회된 row순서랑 컬렴명의 순서랑 일치하지가 않아서요.

IK P님의 프로필 이미지
IK P

작성한 질문수

질문하기