使用 List/Set 进行 Hibernate 查找查询
Using an List/Set for a Hibernate find query
我有一个 Quarkus 应用程序,我们在其中使用 Hibernate ORM 和 Panache 来构建和查询数据库。在某些情况下,我们想使用一个列表或者更确切地说是一个集合来从 table 个“请求”中进行过滤。 Request 实体在实践中具有不同的名称,其状态为 属性,它是一个可以具有三个值的枚举:PENDING、APPROVED 或 DENIED。在 web 前端,我们想使用一个复选框样式的过滤器,然后在 HTTP 请求期间将其作为数组发送到 Quarkus 应用程序,然后我们想以某种方式将它提供给 Hibernate,最好是作为一个 Set 来轻松过滤重复。
我过去在 NodeJS/MongoDB 生态系统中做过一些非常相似的事情,看起来像这样,作为更大聚合管道的一个步骤:
aggregatePipeline.push({
$match: {
status: {
$ne: status //Array of strings
}
}
});
如何在 Hibernate 中完成这样的事情?我尝试了一些谷歌搜索,但结果在很大程度上被人们询问如何从标准查找查询中的游标中获取 Arraylist 弄得一团糟。
提前致谢。
编辑:尝试这条线
List<Publisher> publishers = Publisher.find("name", Arrays.asList("Books", "Publishing")).list();
出现此错误:
org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = record
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
没关系。我试着考虑另一个搜索词,它不会导致我提到的大量不相关的结果。我尝试了“Hibernate find in set”,这让我找到了 this other post。这让我尝试了这一行(为了 FAAFO 目的硬编码了 Set 值):
List<Publisher> publishers = Publisher.find("name IN ?1", new HashSet<>(Arrays.asList("Indiana University Press", "Harvard University Press"))).list();
没有错误,returns 两个条目通过 import.sql 文件导入到开发数据库中。它是“IN ?1”部分,而不是我这次使用 Set 代替 List 进行查询。只要“IN ?1”保留在那里,它就可以与列表一起使用。
我有一个 Quarkus 应用程序,我们在其中使用 Hibernate ORM 和 Panache 来构建和查询数据库。在某些情况下,我们想使用一个列表或者更确切地说是一个集合来从 table 个“请求”中进行过滤。 Request 实体在实践中具有不同的名称,其状态为 属性,它是一个可以具有三个值的枚举:PENDING、APPROVED 或 DENIED。在 web 前端,我们想使用一个复选框样式的过滤器,然后在 HTTP 请求期间将其作为数组发送到 Quarkus 应用程序,然后我们想以某种方式将它提供给 Hibernate,最好是作为一个 Set 来轻松过滤重复。
我过去在 NodeJS/MongoDB 生态系统中做过一些非常相似的事情,看起来像这样,作为更大聚合管道的一个步骤:
aggregatePipeline.push({
$match: {
status: {
$ne: status //Array of strings
}
}
});
如何在 Hibernate 中完成这样的事情?我尝试了一些谷歌搜索,但结果在很大程度上被人们询问如何从标准查找查询中的游标中获取 Arraylist 弄得一团糟。
提前致谢。
编辑:尝试这条线
List<Publisher> publishers = Publisher.find("name", Arrays.asList("Books", "Publishing")).list();
出现此错误:
org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = record Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
没关系。我试着考虑另一个搜索词,它不会导致我提到的大量不相关的结果。我尝试了“Hibernate find in set”,这让我找到了 this other post。这让我尝试了这一行(为了 FAAFO 目的硬编码了 Set 值):
List<Publisher> publishers = Publisher.find("name IN ?1", new HashSet<>(Arrays.asList("Indiana University Press", "Harvard University Press"))).list();
没有错误,returns 两个条目通过 import.sql 文件导入到开发数据库中。它是“IN ?1”部分,而不是我这次使用 Set 代替 List 进行查询。只要“IN ?1”保留在那里,它就可以与列表一起使用。