我在 mysql 表中有一个 int 列,用于存储与状态相关的位。我有兴趣根据状态字段中是否设置了一位或多位进行查询。
我尝试了以下操作:Expressions.booleanTemplate("(status & {0}) = 0", A_BIT_MASK);
但是,这给了我一个InvalidDataAccessApiUsageException:org.hibernate.QueryException:意外的字符:'&'
。
我正在将 Spring Data 与 Hibernate 和 MySQL 一起使用。我试图使用 Querydsl 查询数据库。
最佳答案
首先你需要在 hibernate 中创建按位
public class MySQLDialect extends org.hibernate.dialect.MySQLDialect {
public MySQLDialect() {
super();
registerFunction("bitand", new SQLFunctionTemplate(IntegerType.INSTANCE, "(?1 & ?2)"));
}
}
然后你可以在 querydsl 或 hibernate 中引用它
NumberTemplate<Integer> numberTemplate = Expressions.numberTemplate(Integer.class, "function('bitand', {0}, {1})", path, value);
关于mysql - 如何在 Spring 中使用 Hibernate 和 MySQL 来使用 Querydsl 执行按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799392/