2015-10-12 3 views
0

Я пытаюсь отфильтровать данные из таблицы с нулевым значением. Я пытаюсь получить данные путем поиска двух полей, где name не является полем с возможностью NULL, а productGroup.name - поле с нулевым значением. это мой код:Как получить данные в JPA, которые могут иметь нулевое значение

public static Page page(int page, int pageSize, String sortBy, String order, String filter) { 
    if (page < 1) page = 1; 
    Long total = (Long) JPA.em() 
      .createQuery("select count(c) from InventoryItem c where lower(c.name) like :filter or c.productGroup.name=:filter ") 
      .setParameter("filter", "%" + filter.toLowerCase() + "%") 
      .getSingleResult(); 
    @SuppressWarnings("unchecked") 
    List<InventoryItem> data = JPA.em() 
      .createQuery("from InventoryItem c where lower(c.name) like :filter or c.productGroup.name=:filter order by c." + sortBy + " " + order) 
      .setParameter("filter", "%" + filter.toLowerCase() + "%") 
      .setFirstResult((page - 1) * pageSize) 
      .setMaxResults(pageSize) 
      .getResultList(); 
    return new Page(data, total, page, pageSize); 
} 

если есть нулевое значение в productGroup.name не получает данные, но, когда я хранить productGroup.name он показывает данные. Я делаю что-то неправильно?

Благодаря

+0

так смотреть на SQL испробованы и затем вам может видеть, почему это происходит ... –

ответ

1

, если вы хотите, чтобы выбрать строки, где название, как фильтр или нулевое значение, вы должны изменить его на:

... или (c.productGroup.name =: фильтр OR c.productGroup.name равно нуль)

Вы не можете установить фильтр на нуль и ожидать, что строки, где имя является нулем будут возвращены ....

+0

Я уже пробовал это, но это не приносит никаких данных .. lis t кажется пустым, даже если есть элемент. –

+0

Но это правильный путь. Отправьте запрос, который вы попробовали ... Или проверьте sql, который сгенерирован в журнале –

+0

'List data = JPA.em() .createQuery (" from InventoryItem c где ниже (c.name) нравится: filter или (c.productGroup.name =: фильтр ИЛИ c.productGroup.name равно null) order by c. "+ sortBy +" "+ order) .setParameter (" фильтр ","% "+ filter.toLowerCase() + "%") .setFirstResult ((страница - 1) * pageSize) .setMaxResults (pageSize) .getResultList(); System.out.println ("size:" + data.size()); ' –

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