gpt4 book ai didi

java - Hibernate 和 PostgreSQL - 检查传入 setParameterList 的集合是否为空

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:03 25 4
gpt4 key购买 nike

我正在构建一个查询,我想在其中传递一个集合作为参数:

List<String> items = new LinkedList();
//adding optional items
Query query = s.getNamedQuery("myQueryName").setParameterList("item", items);

我的查询是这样的:

SELECT i from Item i
//... not important things
WHERE ( i.name in (:item) )

但我想让它成为可选的,所以项目列表可以是空的。但是当它为空时,我得到一个异常:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected end of subtree

所以我尝试使用一些函数,例如:

SELECT i from Item i
//... not important things
WHERE ( (:item) is null or i.name in (:item) )

SELECT i from Item i
//... not important things
WHERE ( (:item) is empty or i.name in (:item) )

SELECT i from Item i
//... not important things
WHERE ( size(:item)=0 or i.name in (:item) )

但似乎都不起作用。如何解决此问题并仅在列表不为空时才检查项目名称是否在列表中?

最佳答案

您可以向列表中添加一个您知道永远不会返回 true 的值。例如,假设您有一个整数列表,并且您想要查看列表中是否包含某个 ID。您可以将“-1”添加到列表中,它应该可以按照您想要的方式工作。对于您的字符串示例,只需添加一个永远不会出现的随机字符串。

类似于:

List<String> items = new LinkedList();
items.add("**BLAHBLAH_YO_MAMMA_SO_SLEAZY_SHE_ALWAYS_RETURN_TRUE**");
//add optional items
Query query = s.getNamedQuery("myQueryName").setParameterList("item", items);

关于java - Hibernate 和 PostgreSQL - 检查传入 setParameterList 的集合是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13573781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com