当前位置: 首页 > 知识库问答 >
问题:

JPA createQuery在列表为null或为空时将列表作为参数传递

索寒
2023-03-14

我正在尝试用join在多个表中创建查询,并将列表作为参数传递。我将null&empty检查放在查询字符串中。但是,我在QueryNode.GetDataType上获得了NullPointerException。下面是查询和异常。

    query = em.createQuery("select avg(kpi.duration), kpi.taskId from KPI kpi, User user, UserRole userRole, Shop shop where " +
            "(user.clientId = :customer or :customer is null) and (kpi.userId in :users or :users is null or :users = '' ) and " +
            "(userRole.role in :roles or :roles is null or :roles = '') and (shop.shopName in :shopNames or :shopNames is null or :shopNames = '') " +
            "and kpi.userId = userRole.userId and kpi.userId = user.id and kpi.userId = shop.userId group by kpi.taskId");

    query.setParameter("customer",customer);
    query.setParameter(“users”,users);
    query.setParameter(“roles”,roles);
    query.setParameter("shopNames", shopNames);

    if (query != null){
        List<Object[]> result = query.getResultList();
}

用户、角色和shopNames是列表,而customer是字符串。我创建的查询通常只使用带有null检查的字符串,它起作用了。然而,对于列表,它错误地使用了下面的列表。任何建议如何在不检查if else逻辑中的每个参数的情况下执行此操作。

共有1个答案

常枫涟
2023-03-14

尝试在使用ArrayList之前初始化它,这将避免null,如果它是空的,它应该可以不做任何更改。

 类似资料:
  • 我需要用不同对象的列表填充几个子报表。基本上,假设我有以下内容:< br >二手车子报表< br >新车子报表< br > 我用字符串形式的变量创建了一个vehicle bean类,并为其创建了getter和setter方法。然后在我的数据源中,我传入一个< code >列表 我在主报表中创建了一个字段详细信息行作为类型列表。然后,我将以下内容传递给子报表数据源表达式,new 有什么方法可以将 从

  • 问题内容: 我有一个列表,想通过django raw sql传递。 这是我的清单 我在这里粘贴原始sql的一部分。 现在,当我在Django Python Shell中执行它时,它给出以下错误 我也尝试过通过元组,但是没有用。有人能帮我吗。 谢谢维克拉姆 问题答案: 将列表转换为元组在Postgres中可以正常工作,尽管在sqlite3下相同的代码也会失败,因此看来这是后端特定的。您的代码行将变为

  • 问题内容: 大家好,我在使用某些代码时遇到了麻烦。我正在实施包裹。基本上我有一个全局启动的项目列表 我希望将其作为一个可传递的实例传递,以在旋转时保存实例状态。我实现了saveOnInstanceState方法和onCreate 唯一的问题是它将引发错误,并且错误指向outstate.putParcelableArrayList行。 有人知道解决方法或解决方法吗?我尝试使用Google搜索,并查看

  • 问题内容: 我有一个,我想将其传递给声明的方法。有没有办法做到这一点? 代码看起来 事情 是这样的: 该代码显然是行不通的,因为需要不。 有没有一种方法可以将列表作为变量传递? 这是在Android App中,但我不明白为什么该解决方案不适用于Java 问题答案: 刚过去。

  • 问题内容: 如果将空列表传递到JPA查询中,则会收到错误消息。例如: 由于列表为空,因此Hibernate在SQL中将其生成为“ IN()”,这给我Hypersonic数据库错误。 在Hibernate问题跟踪中有一张票证,但是那里没有太多评论/活动。我也不知道其他ORM产品或JPA规范中的支持。 我不喜欢每次都要手动检查空对象和空列表的想法。是否有一些众所周知的方法/扩展?您如何处理这些情况?

  • 问题内容: 函数应基于行名(在本例中为第2列)选择表中的行。它应该能够使用单个名称或名称列表作为参数并正确处理它们。 这就是我现在所拥有的,但是理想情况下不会有重复的代码,并且会聪明地使用诸如异常之类的东西来选择正确的方式来处理输入参数: 问题答案: 实际上,我同意AndrewHare的回答,只需传递一个包含单个元素的列表即可。 我会这样做: 并期望该参数将始终是一个列表-即使它只是一个元素的列表