0

BirtReportの場合と同様に、EclipseLinkでNamedQueryをカスタマイズする方法。

以下は、BirtReportのQueryおよびCustomizedWhere句です。

これはEclispeLinkのためにこのようにカスタマイズすることは可能ですか、あなたの助けは大歓迎です。

クエリ

select customernumber from orders

クエリ用にカスタマイズされたWhere句

<![CDATA[ 
var parmcount = params["parmorders"].value.length
var whereclause = "";
if( parmcount > 0 ){
    whereclause = " where customernumber in ( ";
}
for( i=0; i < parmcount; i++ ){
    if( i == 0 ){
        whereclause = whereclause + params["parmorders"].value[i];
    }else{
        whereclause = whereclause + " , " + params["parmorders"].value[i];  
    }
}
if( parmcount > 0 ){
    this.queryText = this.queryText + whereclause + " ) ";
}


  ]]> 
4

1 に答える 1

0

ドキュメントから:

JavaPersistenceクエリ言語で静的な名前付きクエリを指定します。クエリ名のスコープは永続性ユニットです。NamedQueryアノテーションは、エンティティまたはマップされたスーパークラスに適用できます

したがって、NamedQuery実行時に変更することはできません。また、パラメータの数が変わると、クエリも変わります。したがってNamedQuery、この特定のケースに使用することは現実的ではありません。

ただし、コードに投稿されているのと同じように、実行時にパラメーターに基づいてクエリを作成し、それに条件を動的に追加してみることができます。

entityManager.createQuery(queryText).getResultList();

また、キーワードINを直接使用し、リストをパラメーターとして設定して、反復を排除することもできます。

//-- Ignoring code for appending parameters & conditions
String whereCondition = " where customernumber IN (:customerNumbers)";
queryText = queryText + whereCondition;
entityManager.createQuery(queryText).setParameter("customerNumbers", customerNumbersList).getResultList();
于 2012-11-26T09:40:00.733 に答える