是否有人知道如何使用按位和(&)作为JPA NamedQuery的条件,而不必使用@NamedNativeQuery?
我在一个字段中存储状态位。
我对视图的实体使用以下defs:

@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来处理本机查询示例吗?
同样,将普通的@NamedQuery与createNamedQuery一起使用也可以!
提前谢谢!!!

最佳答案

Bitwise AND不是JPQL的一部分。但是。。。
可以使用2个规则:
除以2^x x x将位右移x(例如1011010/1000=1011)
如果右位为1,则z mod 2=1(例如1011 mod 2=1)
尝试

SELECT v FROM ViewProductsList v WHERE MOD(v.statusId/16 , 2) = 1

关于mysql - JPA @NamedQuery以按位AND(&)作为条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21246772/

10-09 03:38