【发布时间】:2014-02-10 09:02:25
【问题描述】:
有谁知道如何使用按位 AND (&) 作为 JPA NamedQuery 的条件而不必使用 @NamedNativeQuery?
我将状态位存储在一个字段中。
我正在为视图实体使用以下定义:
@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)"),
})
第一个工作正常,但第二个不喜欢表达,我得到以下内容:
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 可以正常工作!
提前致谢!!!
【问题讨论】:
标签: mysql jpa datanucleus bitwise-and