Ser*_*ito 1 mysql jpa datanucleus bitwise-and
有谁知道如何使用按位AND(&)作为JPA NamedQuery的准则,而不必使用@NamedNativeQuery?
我将状态位存储在字段中。
我将以下def用于视图的实体:
@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)"),
})
Run Code Online (Sandbox Code Playgroud)
第一个工作正常,但第二个不喜欢该表达式,我得到以下信息:
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'
Run Code Online (Sandbox Code Playgroud)
在生产中使用dev MySQL数据库和Google Cloud SQL,因此它必须在两个版本上都可以使用...
有任何想法吗?
更新的问题:
使用如下定义的@NamedNativeQuery时:
@NamedNativeQuery(name = "ViewProductsList.findFeatured", query = "SELECT * FROM view_products_list v")
Run Code Online (Sandbox Code Playgroud)
并如下调用:
Query query=em.createNativeQuery("ViewProductsList.findFeatured", ViewProductsList.class);
List<ViewProductsList> list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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) ...
Run Code Online (Sandbox Code Playgroud)
我尝试了许多createNativeQuery示例的变体,但均未成功。有人知道使用数据核的本机查询示例吗?
同样,将正常的@NamedQuery与createNamedQuery一起使用也可以!
提前致谢!!!
小智 5
Bitwise AND不属于JPQL。但...
可以使用2条规则:
尝试
SELECT v FROM ViewProductsList v WHERE MOD(v.statusId/16 , 2) = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2842 次 |
| 最近记录: |