gpt4 book ai didi

mysql - JPA @NamedQuery 以按位 AND (&) 作为条件

转载 作者:行者123 更新时间:2023-11-29 04:08:22 27 4
gpt4 key购买 nike

有谁知道如何在不使用@NamedNativeQuery 的情况下使用按位与 (&) 作为 JPA NamedQuery 的条件?

我在字段中存储状态位。

我正在为 View 的实体使用以下定义:

@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 的工作 native 查询示例吗?

同样,将普通的 @NamedQuery 与 createNamedQuery 一起使用效果很好!

提前致谢!!!

最佳答案

按位与 不是 JPQL 的一部分。但是……

可以使用 2 条规则:

  1. 除以 2^х 会将位右移 x(例如 1011010/1000=1011)
  2. z mod 2 = 1 如果右位为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com