- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在构建一个查询,我想在其中传递一个集合作为参数:
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/
我想有效地制作我的小型 Spring 项目。所以我在 hql 中使用 IN 子句而不是使用循环。 01) setParameterList() 中的问题 To use setParameterList
我有一个包含 8000 项的整数数组列表。 然后我使用 setParameterList 方法在 hql 中设置该数组列表。 只是一个示例查询 return (Integer) sessionFact
我在 Hibernate 中有 native SQL 查询: SELECT * FROM my_table where id IN (:ids) 我想替换:ids命名参数为 List . Query
我在使用 hibernate 的 setParameterList api 时遇到了一些问题。 我正在尝试将集合传递给 SQLQuery 并执行“in”子句搜索。记录存在于数据库中并执行原始查询,我能
我正在构建一个查询,我想在其中传递一个集合作为参数: List items = new LinkedList(); //adding optional items Query query = s.ge
错误: System.Data.SqlClient.SqlException: Incorrect syntax near ',' 代码: IQuery permissionTypes; if (re
我是一名优秀的程序员,十分优秀!