我是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标准来满足这个搜索?
答案 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 ))));