我有一个要求,我需要根据位掩码值从数据库中检索数据。
这是我的表:员工
我想知道如何编写hibernate代码来使用下面的查询。
select * From Employee where (Flag&5)!=0
对此有什么想法?
答案 0 :(得分:1)
我终于成功了。
criteria.add( Restrictions.sqlRestriction( "(flag & ?) != 0", new Integer[]{ flag }
, new Type[]{ StandardBasicTypes.INTEGER } ) );
感谢您的支持。
答案 1 :(得分:0)
您需要创建一个自定义函数来在HQL中映射按位运算符
1>使用您的数据库的方言注册您的操作员
public class MySQLDialect extends org.hibernate.dialect.MySQLDialect {
public MySQLDialect() {
super();
registerFunction("bitwise_and", new MySQLBitwiseAndSQLFunction("bitwise_and", Hibernate.INTEGER));
}
}
2 - ;扩展和实现SQLFunction库
public class MySQLBitwiseAndSQLFunction extends StandardSQLFunction
implements SQLFunction {
public MySQLBitwiseAndSQLFunction(String name) {
super(name);
}
public MySQLBitwiseAndSQLFunction(String name, Type typeValue) {
super(name, typeValue);
}
public String render(List args) {
if (args.size() != 2){
throw new IllegalArgumentException("the function must be passed 2 arguments");
}
StringBuffer buffer = new StringBuffer(args.get(0).toString());
buffer.append(" & ").append(args.get(1));
return buffer.toString();
}
}
3>在hql中使用新注册的运算符
上找到参考