如何在JPA中获取可以具有空值的数据

时间:2015-10-12 10:45:13

标签: java hibernate jpa pagination

我正在尝试从具有空值的表中过滤数据。 我试图通过搜索名称不可为空的两个字段来获取数据,而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时,它会显示数据。我做错了吗?

由于

1 个答案:

答案 0 :(得分:1)

如果您想选择名称与过滤器类似的行或null,则必须将其更改为:

...或(c.productGroup.name =:filter OR c.productGroup.name为null)

您不能将过滤器设置为null,并且期望返回名称为null的行....