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