2
@NamedQueries(  
   {   
 @NamedQuery(name = "GetAvailableProducts", query = new StringBuilder("").append("SELECT p   FROM Product p WHERE p.type= :type AND (p.available = 'ALL' OR").append(isTest() ? "(p.available = 'TEST' OR)"  : " ").append("p.available = :available)")),  
 }

これにより、 isTest() メソッドを認識できないというエラーが表示されます。このメソッドの代わりに、if ステートメントを lik if(1==1) などのように配置すると、Intellij IDEA で「属性は定数でなければなりません」と表示されます。の解き方?

4

2 に答える 2

4

Java アノテーションのパラメーターは、コンパイル時の定数のみにすることができます。これはうまくいきません。

参考ページ: 注釈

見積もり:

注釈型が定義されると、それを使用して宣言に注釈を付けることができます。注釈は特別な種類の修飾子であり、他の修飾子 (public、static、final など) を使用できる場所ならどこでも使用できます。慣例により、注釈は他の修飾子よりも優先されます。注釈は、アットマーク (@) とそれに続く注釈タイプ、および要素と値のペアの括弧で囲まれたリストで構成されます。値はコンパイル時の定数でなければなりません。

于 2010-12-20T10:43:57.557 に答える
3

NamedQuery からこれを実行できるとは思えません。

複数の名前付きクエリを作成するか、代わりに動的クエリを使用します。

 Query query = em.createQuery(...); 
于 2010-12-20T10:41:54.620 に答える