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

Java 使用Hibernate从2个不同的属性查询范围,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我不熟悉休眠查询。我有一个关于hibernate范围搜索的问题。我想要的是从两个不同的列中搜索一个范围 下面是我的插图 在数据库中: Start_No | End_No 3000 | 4000 我的hibernate查询是这样的 session = getSession(); session.buildLockRequest(new LockOptions(LockMode.NONE)); Criteria crit = sessio

我不熟悉休眠查询。我有一个关于hibernate范围搜索的问题。我想要的是从两个不同的列中搜索一个范围 下面是我的插图

在数据库中:

 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();
输出如下

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=它仍然在3000到4000分贝的范围内
并显示输出。我怎样才能创建一个hibernate标准来满足这个搜索

创建标准的步骤如下

1.创建会话 2.添加投影 3.然后添加限制。 你的投影列表看起来不错

对您的条件执行以下操作(对Restrictions类调用方法返回Criteria对象)

为每个条件定义标准对象

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

将这些条件添加到对象

标准c3=限制条件和(c1,c3); 标准增补(c3)

一行


crit.add(Restrictions.and(Restrictions.ge(“startNo”,Long.parseLong(s_startNo)),Restrictions.le(“endNo”,Long.parseLong(s_endNo)))

如果您要查找介于start_no和end_no之间的一系列值,则可以使用一个简单的where条件。where start\u no=:parma2现在您正在执行类似于
的操作where start\u no>:endNoParam和start\u no>:startNoParam
,这显然不是您所描述的。