JPA - 使用CriteriaBuilder的Oracle位操作

时间:2013-12-13 15:47:53

标签: java sql oracle jpa bit-manipulation

我正在使用CriteriaBuilder动态查询数据库,所有预测都是动态生成的。

我现在面临的唯一问题是将这个本机oracle SQL转换为CriteriaBuilder API。

BITAND示例:https://stackoverflow.com/a/10617716/810277

请有人建议我使用JPA CriteriaBuilder。

提前致谢。

2 个答案:

答案 0 :(得分:3)

你可以使用数学技巧做同样的事情(虽然有点慢):

事实:

  • 除以2 ^х会将位右移x(例如 千分之一百零一万一千零十= 1011)
  • z mod 2 = 1,如果最右边的位是1(例如1011 mod 2 = 1)

所以在Criteria API中就是这样:

    int mask = 0b00100;
    Path<Integer> fieldToTest = root.<Integer>get("fieldToTest");
    Expression<Integer> div = cb.quot(fieldToTest, mask).as(Integer.class);
    Expression<Integer> mod = cb.mod(div, 2);
    Predicate maskMatched = cb.equal(mod, 1);

答案 1 :(得分:0)

在JPA 2.0中,在JPQL / Criteria API中是不可能的。你不得不: 1.要么用Java做那个逻辑。 2.使用原生查询。

在JPA 2.1中,您可以使用Criteria API / JPQL中的function()方法。