按多个条件搜索或单个失败

Search by multiple criteria or single fail

我创建了一个条件对象来过滤搜索,我想自由组合或不组合字段。 例如按序列号搜索 或者通过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()));
    }

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

如果您将条件添加到您的标准中,它们将在 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()));
 }