• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JPA 엔티티 설정할 때 오라클 View는 어떤식으로 설정해야하나요???

21.01.26 18:32 작성 조회수 3.43k

0

안녕하세요.

현재 JPA를 공부하고 있는 1인입니다.

다름아니라 오라클의 뷰를 레파지토리로 만들어서 쓰고 싶은데

에플리케이션프로파티 파일의

spring.jpa.hibernate.ddl-auto=validate

설정에서 오류를 내뿜더라구요.

해서 오라클에 등록되 있는 뷰의 쓰는법을 알고 싶습니다.

spring.jpa.hibernate.ddl-auto=validate설정 none으로 변경하고 돌리면 SQL쿼리는 문제가 없는데 

실제로 가져온 값을 보면

LIST내에서 첫번째 인덱스 값만 계속 출력하더라구요. (사이즈가 10개라면 10개다 첫번째 값과 동일한 내역 출력)

혹시 알수 있으면 첫번째 인덱스 값만 계속 출력하는 이유도 알고 싶습니다.

결론

1. 오라클 뷰 엔티티 작성하는 방법.

2. 쿼리로 가져온 List값이 첫번째 인덱스 값으로 계속 출력되는 이유

이상 잘 부탁드립니다.

답변 2

·

답변을 작성해보세요.

0

짤짤이님의 프로필

짤짤이

질문자

2021.01.27

List<ViewEntity> searchResultList = em.createNativeQuery(sb.toString(), ViewEntity.class)

.setParameter("ID", Id)

.getResultList();

for(ViewEntity entity : searchResultList) {

if(entity.getName()!=null) {

System.out.println("name    : " + entity.getName());

}

}

간단히 쓰자면 위와 같은 모습이 됩니다.

위와 같은 모습일 때 

List가 가지고 있는 값은 이러한 모습이며

첫번째를 제외한 나머지 엔티티는 

> 화살표가 없을때도 있고 

> 화살표가 있어도 값이 보이지 않는 상태가 됩니다.(마우스 드래그 하면 첫번째랑 똑같은 값이 들어있습니다.)

데이터값 출력보다는 값 받아오는 곳에서 무언가 설정을 잘못한듯 한데

여기서 받은 SQL을 돌리면 문제 없이 원하는 값을 받아옵니다.

또 받는 코드를 

List<Object> obj = em.createNativeQuery(sb.toString())

.setParameter("ID", Id)

.getResultList();

이러한 식으로 받게 되면 엔티티형태로 받는것은 아니나 리스트 안에는 제가 원하는 값이 들어 있습니다.

요약하자면

List를 받아올 때 쿼리는 실제로 돌려보면 문제가 없이 원하는 값을 받아옵니다.

<1> List<ViewEntity> searchResultList = em.createNativeQuery(sb.toString(), ViewEntity.class)

<1>와 같이 ViewEntity클래스를 지정하여 받아오라고 하면 List안의 값이 쿼리 돌렸을때 값과 일치하지 않으며

<2>List<Object> obj = em.createNativeQuery(sb.toString())

<2>와 같이 ViewEntity클래스를 지정하지 않고 받을 시 원하는 값이 나옵니다.

0

1. @Table이라는 애노테이션을 사용해서 View에 엔티티를 맵핑할 수 있습니다. 아래 링크에서 예제 확인해 보세요.

https://vladmihalcea.com/map-jpa-entity-to-view-or-sql-query-with-hibernate/

2. List 값이 첫번째 인덱스 값으로 출력된다고 하셨는데 List를 어떻게 출력하신건지 코드를 보여주실 수 있나요?