如何使用hibernate基于位掩码值获取记录?

时间:2017-01-19 05:12:45

标签: java hibernate

我有一个要求,我需要根据位掩码值从数据库中检索数据。

这是我的表:员工

enter image description here

我想知道如何编写hibernate代码来使用下面的查询。

select * From Employee where (Flag&5)!=0

对此有什么想法?

2 个答案:

答案 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中使用新注册的运算符

您可以在https://forum.hibernate.org/viewtopic.php?t=940978

上找到参考