那么如何在HQL中检查集合是否为空?简单的例子:
select * from Book book where title in (:titles)
如果标题是一个变量,我可以
select * from Book book where (:titles is null or title in (:titles))
但是如果标题是一个列表/集合呢?
select * from Book book where (:titles is null or title in (:titles))
如果标题是列表,这将不起作用。经过激烈的搜索,我尝试了是空的、大小的和存在的函数,我还尝试了(: title)是空选项。
以上都不起作用。我知道有一种硬编码方式,根据标题列表的状态编写不同的查询,如果为空,则一个查询,如果为空,则另一个查询。但这将产生许多类似的HQL查询,只需稍作修改。我的用例没有更多的列表需要考虑,所以这不是我想要的。
我的问题是,是否可以直接在HQL中进行检查?
:标题
是一个列表。
您要搜索具有这些“标题”的书籍。
用户,
所以这个列表可能是空的,其中可能有一个或多个元素。
在任何情况下,您都将使用查询。setParameterList(),以便将标题集合传递到查询中,如本答案中所述。
那么,如果您试图传递的参数可能为空,您就不会想要使用set方法。毕竟,我们在这里讨论的Java。
所以,你需要的是检查这个列表是否为空<此外,您不想让hibernate检查用户选择的标题列表是否为空
您也只需要一个查询,不需要多个查询。
实现这一点的方法是使用查询生成器<有许多方法可以实现这种方法。但总的来说
>
或者您可以简单地使用StringBuilder来构建查询的select、from和where子句,例如:
Map<String,Object> params = new HashMap<String,Object>();
StringBuilder queryBuilder = new StringBuilder();
queryBuilder.append(" from Book book ");
if(!titlesList.isEmpty()){
queryBuilder.append(" where book.title in (:titles) ");
params.put("titles", titlesList);
}
Query query = entityManager.createQuery(queryBuilder.toString());
for ( Map.Entry<String,Object>; param : params.entrySet()) {
if(param instanceof Collection<?>){
query.setParameterList(param.getKey(),param.getValue());
}
//if param is of type String then query.setString etc.
//else setParameter, you get the idea, use the docs
}
List<Book> results = (List<Book>) query.list();
问题内容: 我尝试生成一个HQL查询,其中包括带有空Appoinment集合(由OneToMany映射)的用户: 我尝试了几种方式() 但仍然不是我想要查看的结果或HQL或SQL SERVER中的某些错误 注意: 没有JOIN的查询有效: 解决了 另一个JOIN解决了这个问题: 问题答案: 使用应该可以(我希望使用JPQL语法): 如果没有,请显示生成的SQL。 参考文献 Hibernate Co
我有一个具有如下结构的集合对象: 我该怎么办?非常感谢,很抱歉我的英语不好!
问题内容: 我要实现以下功能: 如何检查向量元素类型? 请注意, 向量可能为空,因此我无法检查第一个元素是“ instanceof”整数还是String … 编辑: 好吧,我脑子里有个念头,我不知道它是否会起作用 我可以按以下方式实现checkType函数: 是否可以检查T是否为整数?! 提前致谢 问题答案: *由于 类型擦除, *泛型类型参数 在运行时不可恢复(某些特殊情况除外)。这意味着在运行
大家好,我想检查一下,例如在Firebase中创建一个文档集合之前,如果object.name、object.title、object.velocity....只是一个空格("),或者它们在打字稿中为空(Ionic 4),但我认为还有另一种更快的方法,最好的建议是什么? 我所做的是,但我认为是这么长...: 非常感谢。
问题内容: 通过使用Java反射,我们可以轻松知道对象是否为数组。判断对象是否为集合(Set,List,Map,Vector …)的最简单方法是什么? 问题答案: