java - 如何在JPA中获取可以为空值的数据

标签 java hibernate jpa pagination

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

谢谢

最佳答案

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

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

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

关于java - 如何在JPA中获取可以为空值的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33079191/

相关文章:

java - Spring Data返回空元素的List,但List有很多元素

java - JQL ORDER BY 子句和继承

java - Maven 插件依赖项

java - 将字符串转换为日期 Java

java - 使用 -gc true 在 Java 12 与 Java 8 上的流 API 的神秘微基准测试结果

spring - 在 SPRING BOOT 中配置多个数据库

java - 子类中忽略了 AdditionalCriteria

java - 在 java 方法中省略 public 修饰符

hibernate - 异步搜索

java - 如何在 Hibernate 查询和 Session.get() 中启用 MySQL BINARY 运算符