gpt4 book ai didi

java - 使用 LIKE % 的 HQL 查询不起作用

转载 作者:行者123 更新时间:2023-12-01 16:33:42 26 4
gpt4 key购买 nike

我尝试重现这个对我有用的 SQL 查询,没有复制隐私问题的确切语法,但我认为您从此查询中了解了目的。

SELECT t1.Column1, t2.Column2, t2.Column3
FROM Table1 as t1
INNER JOIN Table2 as t2 ON t1.Column1 LIKE %t2.Column2%
INNER JOIN Table2 as t2 ON t1.Column1 LIKE %t2.Column3% ;

在 HQL 查询中我尝试了这个,但它似乎没有给我任何结果:

returns empty list [ ]

HQL查询:

session.createQuery("... where
t1.Column1 LIKE '%"+"t2.Column2"+"%'
and t1.Column1 LIKE '%"+"t2.Column3"+"%' ").list();

我尝试插入实际值而不是列,它确实有效,但我认为 hibernate 将属性视为原始值而不是迭代对象。任何人都可以提出一个解决方案吗?我见过有人用标准来处理这个问题,但主要问题是我没有在这些类之间建立任何关联,所以我认为它不起作用。

我已经被这个问题困扰了一个多星期了,我想到了一个非常简单的解决方案,但它并不是真正的最佳解决方案,就是为每个循环执行一个像这样的循环(将其保留为最后一个解决方案):

//list1 of query result unique column2 values
//list2 of query result unique column3 values
for each (list1)
for each (list2)
HashSet<Object,Object> result = Session.createQuery("... where
t1.Column1 LIKE '%"+":list1"+"%'
and t1.Column1 LIKE '%"+":list2"+"%'").setParameter("list1",list1).setParameter("list2",list2).tolist();
HashSet<Object,Object> lastresult= new HashSet();
lastresult.add(result);

最佳答案

更新(解决方案):

更新:正如怀疑的那样,查询将对象的属性视为原始值而不是要迭代的实际对象,因此我通过添加“+”号所采取的方法是错误的,我应该使用该函数' CONCAT' 相反,它确实解决了我的问题。

session.createQuery("... WHERE lower(t1.Column1) LIKE
Concat(Concat('%',lower(t2.Column2)),'%') and lower(t1.Column1) LIKE Concat(Concat('%',lower(t2.Column3)),'%')").tolist();

关于java - 使用 LIKE % 的 HQL 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62004278/

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