작성
·
985
·
수정됨
0
안녕하세요.
지금은 안쓰는 JDBC는 ResultSet.getMetaData()를 통해 컬럼명, 타입을 가져올 수 있었는데, EntityManager를 사용하는 경우 Query의 컬럼명을 확인할 수 있는지 궁금합니다.
(질문참고) https://m.blog.naver.com/heoguni/130170563284
감사합니다.
답변 4
1
안녕하세요. 허당더기님
다음과 같이 map으로 조회하는 방법이 있습니다.
jpql = "SELECT new map(e.column1 as column1, e.column2 as column2) FROM EntityClass e";
TypedQuery<Map<String, Object>> query = entityManager.createQuery(jpql, Map.class);
List<Map<String, Object>> result = query.getResultList();
for (Map<String, Object> row : result) {
String column1Value = row.get("column1").toString();
String column2Value = row.get("column2").toString();
}
Native SQL 쿼리를 사용하는 경우는 다음과 같습니다.
sql = "SELECT column1, column2 FROM entity_table";
Query query = entityManager.createNativeQuery(sql);
List<Object[]> result = query.getResultList();
for (Object[] row : result) {
String column1Value = row[0].toString();
String column2Value = row[1].toString();
}
이 방법을 사용하면 Object[]
형태로 결과가 반환되며, 각 컬럼의 값을 배열 인덱스를 사용하여 접근할 수 있습니다.
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);
}
순수한 엔티티를 조회하는 경우에는 DB 컬럼명을 조회하기는 어렵고, 대신에 자바 객체의 필드명을 조회할 수 있습니다.
Metamodel metamodel = em.getMetamodel();
EntityType<EntityA> entityType = metamodel.entity(EntityA.class);
Set<Attribute<? super EntityA, ?>> attributes = entityType.getAttributes();
for (Attribute<? super EntityA, ?> attribute : attributes) {
String name = attribute.getName();
System.out.println("name = " + name);
}
감사합니다.
0
안녕하세요.
Native SQL을 사용하는데
Query query = entityManager.createNativeQuery(sql); List<Object[]> result = query.getResultList(); ResultSet resultSet = query.unwrap(java.sql.ResultSet.class);
하면 에러가 발생하네요.
--에러--
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: Could not unwrap this [org.hibernate.query.internal.NativeQueryImpl@4c9ed40] as requested Java type [java.sql.ResultSet]
0
0
안녕하세요. 허당더기님, 공식 서포터즈 OMG입니다.
.
질문 내용이 jpa의 show-sql 설정으로 해결되지 않나요?
https://lannstark.tistory.com/14
해결이 안된다면 show-sql을 true로 했을 때와의 차이를 알려주시면 답변에 도움이 될 것 같습니다.
.
감사합니다.
친절한 설명 감사합니다.