我创建了一个标准对象来过滤搜索,我希望可以自由组合字段。 例如按序列号搜索 或者通过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()));
}
如果我同时填写两个,我会得到一个结果。 你有什么想法吗?
答案 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()));
}