2015-01-28 3 views
0

Я создал объект критериев для фильтрации поиска, и я хочу иметь возможность комбинировать поля или нет. Например поиск по серийному номеру или поиском по внутрибрюшинен адресу или обаПоиск по нескольким критериям или одиночный сбой

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

Если вы добавляете критерии к вашим критериям, они AND AND в SQL. Для того, чтобы быть в состоянии справиться с ситуацией можно добавить, если условие:

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())); 
} 
+0

Спасибо за ответ, но есть проблема, для ipadress он работает нормально, но для серийного номера матч фильтра со всем серийным номером. Однако фильтр выглядит правильно: –

+0

проверьте ваше устройство.getSerialNumber(). Если это возвращает пустую строку, вы не будете фильтровать ничего – WeMakeSoftware

+0

Это не пусто, проблема исходит из других источников. Я проверю;) спасибо –

Смежные вопросы