2011-07-29 1 views
0

JSP 페이지에서 muti-select 양식 요소로부터받은 정보로 보고서를 작성합니다.보내는 방법 모든 객체의 "id"가 필요한 NamedQuery에 객체의 배열을 보냅니다.

내 저장소 클래스에서 해당 요소의 개체 배열을 가져 오는 중입니다. 이 객체들 각각에 대해 getId 함수를 호출하고 해당 ID를 NamedQuery으로 보내야합니다.

다음은 설명을 돕기위한 코드 예제입니다. 단일 객체를 처리하는 방법을 알고 있지만 객체 배열을 사용하면 .setParameter(1, employees[].getId()) 부분에서 길을 잃을 수 있습니다. 요청에 의해

public List<RequestByRequester> getFormInformation(
     Employee[] employees) 
     throws NoDataFoundException { 

     List<RequestByRequester> resultList = getEm().createNamedQuery(
       "requestByRequestor.getRequestsByRequesters", RequestByRequester.class) 
       .setParameter(1, employees[].getId()) 
       .getResultList(); 

     return resultList; 
    } 

쿼리 :

SELECT EMP.EMPL_FIRST_NAME || ' ' || EMP.EMPL_LAST_NAME REQUESTER, 
      R.RQST_ID RQST_ID, 
      R.TITLE TITLE, 
      R.DESCRIPTION DESCR, 
      DECODE(R.RESOLUTION_DATE, NULL, 'Open', 'Closed') STAT 
    FROM TARTS.REQUESTS R, SYS_EMPLOYEES EMP 
    WHERE R.EMPL_ID_REQUESTED_BY = EMP.EMPL_ID 
    AND EMP.EMPL_ID IN (?) 
    ORDER BY 1, 5 DESC, 2 
+0

무엇 "namedQueries.queryName"생겼 그것을 지정하려면이 옵션을 사용할 수 있습니까? 아마도 "in"을 수행하고 ID 목록을 제공 할 수 있습니까? –

+2

이 질문은 정말로 JPA 질문이며 봄 질문이 아닙니다. –

+0

@ bkent314 실제 쿼리 이름에 문자열을 넣을 수 있습니다. 나는 혼란을 덜어주기 위해 노력했지만, 나는 그 반대를 성취 한 것 같습니다. 나는 아주 새로운 자바/jpa/spring 그것이 스프링 관련 질문이라고 생각했습니다. 죄송합니다^_^ –

답변

3

내가 마담 미스틱은 쿼리가 실제로 무엇인지 알아내는 도움을 얻기 위해 호출했지만, 행운, 그래서 난 그냥 갈거야 ...

명명 된 쿼리는 다음과 비슷한 모습이 될 것입니다

select x 
from MyClass x 
where x.children.id in (:ids) 

은 다음으로 ID를 얻을 목록

List<Integer> ids = new ArrayList<Integer>(); 
ids.add(someid); // etc 

는 쿼리

.setParameter("ids", ids) 
+0

나는 이해한다고 생각한다. 나는 이와 같은 일을 고려하고 있었지만, ID에 문자열을 추가하고 그 문자열을 param으로 보내는 직원 배열을 통해 각각을 수행했다. 당신의 것이 훨씬 깨끗합니다. 고맙습니다! –

+0

나는 이것이 늙었지만'x.children.id'가 어떻게 작동하는지 이해하지 못한다. 이 일이 좋을까요? 'SELECT * FROM myClass where myClass.theColumn NOT (: listOfNumbersToExclude)'? 감사! – shanehoban

+1

HQL'x.children.id'의 @shanehoban이 당신을위한 join을합니다. 'children'은'getChildren()'에 매핑되어,'x'에 대한 외래 키 참조를 갖는 엔티티들의 집합을 반환합니다. 전체 HQL 쿼리는'Select x. * from MyTable x Join ChildTable c on c.myTableId = x.id where c.id in (: ids)'와 동일합니다. 외래 키 정보는 자식 클래스의'getMyClassId()'메소드에있는'@ ManyToOne' 주석으로 정의됩니다. 그렇습니다 (: ids)도 아닙니다. btw, 네이티브 HQL에서 모든 참조 된 테이블은 앨리어스를 가져야 만합니다. 그래서 'SELECT t FROM myClass t where ...'와'select'는 선택 사항입니다. 그래서'FROM myClass t where ... '도 작동합니다. – Bohemian

관련 문제