2014-03-26 3 views
1

가 나는 ID, 이름, 연령과 같은 열이 포함의 학생같은 테이블이 나는 아래와 같은 NativeQuery를 사용하여 특정 열 값을 복귀하고있다. 우리는 학생 테이블에 연령의 목록을 얻을 것이다 쿼리 이상 사용하여JPA를 사용하여 테이블에서 여러 열을 얻는 방법? 예를 들어

Query query = entityManager.createNativeQuery("SELECT age FROM Student"); 
List list=query.getResultList(); 

는 지금은 나이 및 테이블에서 이름을 싶어.

Query query = entityManager.createNativeQuery("SELECT age,name FROM Student"); 
List list=query.getResultList(); 

내 코드가 잘 실행되지만 한 목록에서 이름을 가져올 수 있고 다른 목록에서 나이를 지정할 수 있습니다. 어떻게해야합니까? 고맙습니다.

참고 프로젝트에 엔티티 클래스 또는 POJO 클래스가 없습니다. 네이티브 쿼리를 사용하여 데이터베이스에서 테이블을 가져옵니다.

+0

어떤 예외가 발생합니다. 그것은 작동해야하며 객체의 목록을 반환해야합니다 [] – andy

+0

@andy 실행 중이라고 미안하지만 어떻게 다른 목록의 나이와 다른 목록의 이름을 얻을 수 있습니까? (0); 문자열 이름 = (문자열) 값 [1];}();에 대한 같은 캐스트를 사용하여 – Prabha

+2

감사합니다 – andy

답변

1

이 질문에 대한 답변은 here입니다.

그러나 나는 열 이름과 나이가있는 Student라는 표준 엔티티를 만드는 것이 좋습니다. 이 접근법은 향후 구현 및 유지 관리가 훨씬 쉬워 질 것입니다.

+0

감사합니다. 여기 POJO 클래스가 없습니다. – Prabha

+0

가장 쉬운 방법은 그들을 만드는 것입니다. 그러나 당신이 그것을하고 싶지 않다면 - 당신은 표준 java.sql.Connection 인스턴스를 사용하는 것을 고려할 것인가? 이렇게하면 쿼리와 결과를 직접 관리 할 수 ​​있습니다. 100 % 제어. – altanis

2

두 가지 방법으로 접근 할 수 있습니다.

  1. 결과 집합의 값을 별도의 목록으로 구문 분석하십시오. 당신이 그것을 위해 정의 된 개체를 가지고 있지 않기 때문에, 쿼리는 그들이 나타나는 인덱스 나이와 이름을 액세스 할 수 있습니다, 반환 된 각 행에 대해

    List<Object[]> list = query.getResultList(); 
    

    를 반환합니다. 당신이 인덱스 0 될 것이다, 그래서 즉 나이는 위의 예에서 첫번째 선택하고 이름 인덱스 1

    for (Object[] obj : list) { 
        age = obj[0]; 
        name = obj[1]; 
        // ..put them into whatever collection you desire 
    } 
    
  2. 를 사용하여 두 개의 쿼리입니다. 하나는 AGE를 선택하고 다른 하나는 NAME을 선택합니다. 각각은 자신의 목록에 해당 값을 반환합니다.

    Query query = entityManager.createNativeQuery("SELECT age FROM Student"); 
    List ages=query.getResultList(); 
    
    query = entityManager.createNativeQuery("SELECT name FROM Student"); 
    List names=query.getResultList(); 
    

    이 방법은 두 목록 간에는 아무런 관계가 없다는 점만주의해야합니다. 즉, 연령 [3]은 논리적으로 이름과 일치하지 않을 수 있습니다 [3]. 그러나 ... 그대로, 원래의 질문에는 두 목록을 어떻게 만들어야하는지에 대한 정의가 없습니다.

+0

나는 두 번째 방법으로했다. 나는 첫번째 방법을 모른다, 이제 괜찮아. 고마워. – Prabha