我的 msql 表中有 Long 类型的列,该列代表位错误。
我需要选择设置了所有几个标志的对象: 列值 & 标志 = 列值
我尝试:
javax.persistence.Query q = getEntityManager().createQuery("SELECT u FROM Userattributes u WHERE u.myValueFlags & mask := mask");
q.setParameter("mask", mask);
但是我有一个语法错误:
Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: Exception Description: Syntax error parsing the query [SELECT u FROM Userattributes u WHERE u.userattributesPK.attributeID =:attributeId and u.myValueFlags & mask := mask], line 1, column 103: unexpected token [mask]. Internal Exception: NoViableAltException(78!=[652:1: simpleConditionalExpressionRemainder[Object left] returns [Object node] : (n= comparisonExpression[left] | (n1= NOT )? n= conditionWithNotExpression[(n1!=null), left] | IS (n2= NOT )? n= isExpression[(n2!=null), left] );]) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1328) at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:425)
最佳答案
这是无法完成的,因为 JPQL 不支持按位运算。
关于JPQL 查询位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291822/