我正在尝试从具有空值的表中过滤数据。 我试图通过搜索名称不可为空的两个字段来获取数据,而productGroup.name是可以为空的字段。 这是我的代码:
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 :(得分:1)
如果您想选择名称与过滤器类似的行或null,则必须将其更改为:
...或(c.productGroup.name =:filter OR c.productGroup.name为null)
您不能将过滤器设置为null,并且期望返回名称为null的行....