2011-07-29 5 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私は実際のクエリ名を文字列にすることができます。私はそれをあまり混乱させないようにしようとしていましたが、私はその反対を達成したようです。私はjava/jpa/springにとって非常に新しいです。それは春に関係する質問だと思っていました。申し訳ありません^ _^ –

答えて

3

私はあなたのクエリが実際にあったものを見つけると助けを得るためにマダム・ミスティークを呼び出してみましたが、ない運、私はちょうどそれのために行くつもりですその後にあなたのIDを取得

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

:...

あなたの名前付きクエリは次のようになります。リスト

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 IN(:listOfNumbersToExclude)'のようなものもありますか?ありがとう! – shanehoban

+1

@shanehoban in HQL 'x.children.id'はあなたのために参加します。 'children'は' getChildren() 'にマップされ、' x'への外部キー参照を持つエンティティのSetを返します。 HQLクエリ全体は、 'select x。* from MyTable x join ChildTable c for 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

関連する問題