2

@NamedNativeQuery を使用せずに JPA NamedQuery の基準としてビットごとの AND (&) を使用する方法を知っている人はいますか?

フィールドにステータスビットを保存しています。

ビューのエンティティに次の定義を使用しています。

@NamedQueries({
    @NamedQuery(name="ViewProductsList.findAll", query="SELECT v FROM ViewProductsList v"),
    @NamedQuery(name="ViewProductsList.findFeatured", query="SELECT v FROM ViewProductsList v WHERE v.statusId & 16"),
    @NamedQuery(name="ViewProductsList.findBySubcategory", query="SELECT v ViewProductsList v WHERE v.subcatId IN (:subcatIds)"),
})

最初のものは正常に動作しますが、2番目のものは式が気に入らないため、次のようになります:

18:02:13,528 DEBUG [DataNucleus.Query] - JPQL Single-String with "SELECT v FROM ViewProductsList v WHERE v.statusId & 16"
18:02:13,553 DEBUG [DataNucleus.Query] - JPQL Query : Compiling "SELECT v FROM ViewProductsList v WHERE v.statusId & 16"
>>ERROR: 'Portion of expression could not be parsed: & 16'

dev MySQL データベースと Google Cloud SQL を本番環境で使用しているため、両方のバージョンで動作する必要があります...

何か案は?

更新された質問:

次のように定義された @NamedNativeQuery を使用する場合:

@NamedNativeQuery(name = "ViewProductsList.findFeatured", query = "SELECT * FROM view_products_list v")

そして、次のように呼び出します。

Query query=em.createNativeQuery("ViewProductsList.findFeatured", ViewProductsList.class);
List<ViewProductsList> list = query.getResultList();

次のエラーが表示されます。

java.lang.IllegalStateException: You cannot invoke getResultList/getSingleResult when the Query is an UPDATE/DELETE
    at org.datanucleus.api.jpa.JPAQuery.getResultList(JPAQuery.java:161)
    at cultivartehidroponia.ProductsServlet.doGet(ProductsServlet.java:81) ...

createNativeQuery の例の多くのバリエーションを試しましたが、成功しませんでした。datanucleus を使用したネイティブ クエリの例を知っている人はいますか?

繰り返しますが、createNamedQuery で通常の @NamedQuery を使用すると問題なく動作します。

前もって感謝します!!!

4

3 に答える 3

2

「ビットごとの AND」はJPQL の一部ではありません。ネイティブ クエリは移植可能な方法です。

于 2014-01-21T07:50:47.577 に答える