当前位置: 首页 > 面试题库 >

将空列表作为参数传递给JPA查询会引发错误

徐秋月
2023-03-14
问题内容

如果将空列表传递到JPA查询中,则会收到错误消息。例如:

List<Municipality> municipalities = myDao.findAll();  // returns empty list
em.createQuery("SELECT p FROM Profile p JOIN p.municipality m WHERE m IN (:municipalities)")
    .setParameter("municipalities", municipalities)
    .getResultList();

由于列表为空,因此Hibernate在SQL中将其生成为“ IN()”,这给我Hypersonic数据库错误。

在Hibernate问题跟踪中有一张票证,但是那里没有太多评论/活动。我也不知道其他ORM产品或JPA规范中的支持。

我不喜欢每次都要手动检查空对象和空列表的想法。是否有一些众所周知的方法/扩展?您如何处理这些情况?


问题答案:

根据JPA 1.0规范中的 4.6.8 节的 表达式

逗号分隔列表中必须至少有一个元素定义IN表达式的值集。

换句话说,不管Hibernate解析查询和传递an的能力IN()如何,无论特定数据库是否支持此语法(PosgreSQL都不符合Jira问题),如果需要,都应在此处使用动态查询代码可移植(我通常更喜欢使用Criteria
API进行动态查询)。



 类似资料:
  • 我有表emp列emp_name,emp_desc,emp_age,emp_country,emp_pincode。 我正在使用Spring数据Jpa进行数据库操作。 和EMP存储库。findAll();从emp表激发select*。 但我有如下要求 客户端应用程序将传递列名以在方法中选择作为参数,我只想获取Jpa而不是Findall()中的列名。 如何在Jpa中实现这一点?

  • 问题内容: 我有一个整数或字符串列表,需要将其作为Delphi DataSet的参数传递。怎么做? 这是一个例子。MyQuery类似于: 我将参数设置为列表或数组或其他内容: 它将导致此查询发送到sql服务器: 如果该解决方案也可以与字符串一起使用,则执行以下查询会更好: 变得: 我相信这是一个简单的问题,但是“ IN”并不是搜索网络的好关键字。 请回答如何在IDE中配置参数,查询以及如何传递参数

  • 我正在尝试用join在多个表中创建查询,并将列表作为参数传递。我将null&empty检查放在查询字符串中。但是,我在QueryNode.GetDataType上获得了NullPointerException。下面是查询和异常。 用户、角色和shopNames是列表,而customer是字符串。我创建的查询通常只使用带有null检查的字符串,它起作用了。然而,对于列表,它错误地使用了下面的列表。任

  • 我正在使用JPA Criteria API构建查询。当我使用

  • 问题内容: 我正在创建一种通过传递搜索字段从任何表中选择ID的方法。 但是我得到一个有关语法错误的MySqlException。当我查看“异常”消息时,它向我显示带引号的查询表!如何将表格作为不带引号的参数传递? 问题答案: 大多数数据库不允许您通过参数指定表名或列名。参数用于 值 。如果确实确实需要使它动态化,则应验证输入(它应该是一个已知的表名,并且该表中具有已知的列名),然后将其包括在SQL

  • 我有一个spark scala udf,它将一个参数作为dataframe的列,其他参数作为列表,但当我运行函数时,它抛出错误,指向列表参数为 请引导