使用Hibernate从2个不同的属性查询范围

时间:2017-01-18 03:54:43

标签: java hibernate java-ee

我是hibernate查询的新手。我对hibernate范围搜索有疑问。我想要的是搜索2个不同列的范围 下面是我的插图

数据库中的

 Start_No | End_No
  3000    | 4000

我的hibernate查询就像这样

session = getSession();
            session.buildLockRequest(new LockOptions(LockMode.NONE));
            Criteria crit = session.createCriteria(CardRange.class);

if(!IMXUtil.isEmpty(s_startNo) && !IMXUtil.isEmpty(s_endNo)){
                crit.add(Restrictions.ge("startNo", Long.parseLong(s_endNo)));

                crit.add(Restrictions.ge("startNo", Long.parseLong(s_startNo)));

            }

ProjectionList projList = Projections.projectionList();
            projList.add(Projections.property("cardRangeId"));
            projList.add(Projections.property("startNo"));
            projList.add(Projections.property("endNo"));
            projList.add(Projections.property("issuerId"));
            projList.add(Projections.property("status"));
            projList.add(Projections.property("createdDate"));
            projList.add(Projections.property("lastModifiedDate"));
            crit.setProjection(projList);
            crit.setFirstResult(iDisplayStart);
            crit.setMaxResults(iDisplayLength);

return crit.list();

输出就像这样

如果我把3500放到3600 =它仍然落在db中3000到4000的范围内 并显示输出。我如何能够创建一个hibernate标准来满足这个搜索?

1 个答案:

答案 0 :(得分:0)

创建标准的步骤是

1.创建会话 2.添加投影 3.然后添加限制。 您的投影列表似乎很好。

按照您的标准执行以下操作(在Restrictions类上调用方法返回条件对象),

为每个条件定义标准对象

标准c1 = Restrictions.ge(" startNo",Long.parseLong(s_startNo)); 标准c2 = Restrictions.le(" endNo",Long.parseLong(s_endNo));

将这些添加到条件对象

标准c3 =限制和(c1,c3); crit.add(C3);

单行

crit.add(Restrictions.and(Restrictions.ge(" startNo",的Long.parseLong(s_startNo)),Restrictions.le(" endNo",的Long.parseLong(s_endNo ))));