hibernate 显示不选择任何内容的查询参数

eimct9ow  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个带有文本列的表,我想选择与用户提供的搜索参数列表匹配的所有行:

select * from value where value.text in ('Mary', 'Steve', 'Walter');

此外,如果找不到他的任何搜索词,我想通知用户。假设Value中不存在‘Steve’。Text列,我如何编写将显示‘Steve’的查询?因为该信息不存在于任何表中,所以我不知道如何使用SQL查询来完成它。
实际的Hibernate代码如下所示:

List<String> searchItemList = new ArrayList<>();
searchItemList.add("Mary");
searchItemList.add("Steve");
searchItemList.add("Walter");
Query query = em.createQuery("select v from Value as v where v.text in ( :searchitemlist )");
query.setParameter("searchitemlist", searchItemList);
List result = query.getResultList();
log.info("{}", result.size());
log.info("{}", result);

搜索项列表是用户提供的所有搜索词的列表。可以有几百行长。当前的解决方法是为每个搜索项搜索一次值表,并记录所有返回0行的查询。这是相当低效的,当然还有更好的方法?请指点一下。

wwodge7n

wwodge7n1#

您可以使用以下查询来获取数据库中存在的搜索项的数组

SELECT DISTINCT value.text from value where value.text in ('Mary', 'Steve', 'Walter');

运行此查询后,如果我们假设答案存储在名为Result的数组中,notExistSearchListItems将为您提供最终结果

IEnumerable<string> notExistSearchListItems = searchItemList.Except(result);

相关问题