按多个标准搜索或单个失败

时间:2015-01-28 14:21:18

标签: java hibernate criteria

我创建了一个标准对象来过滤搜索,我希望可以自由组合字段。 例如按序列号搜索 或者通过ip地址搜索 或两者

Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Device.class);

    if (device.getSerialNumber() != null) {
        criteria.add(Restrictions.like("serialNumber", device.getSerialNumber()));
    }
    if (device.getIpAdress() != null)
    {
        criteria.add(Restrictions.like("ipAdress", device.getIpAdress()));
    }

如果我同时填写两个,我会得到一个结果。 你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您将Criterions添加到您的条件中,它们将在SQL中进行AND运算。为了能够处理这种情况,你可以添加一个if子句:

if (device.getSerialNumber() != null && device.getSerialNumber().trim().length > 0 
     && device.getIpAddress() != null && device.getIpAddress().trim().length > 0 ) {
        criteria.add(Restrictions.or(
              Restrictions.like("serialNumber", device.getSerialNumber()),
              Restrictions.like("ipAdress", device.getIpAdress()));
} else if (device.getIpAddress() != null && device.getIpAddress().trim().length > 0 ) {
    criteria.add(Restrictions.like("ipAdress", device.getIpAdress()));
} else if (device.getSerialNumber() != null && device.getSerialNumber().trim().length > 0 ) {
  criteria.add(Restrictions.like("serialNumber", device.getSerialNumber()));
 }