Я попытался воспроизвести этот 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 запрос Я пробовал это, но, похоже, он не дал мне никаких результатов:
возвращает пустой список []
Запрос HQL:
session.createQuery("... where
t1.Column1 LIKE '%"+"t2.Column2"+"%'
and t1.Column1 LIKE '%"+"t2.Column3"+"%' ").list();
I Я пытался вставить фактические значения вместо столбцов, это действительно работает, но я думаю, что спящий режим обрабатывает атрибуты как необработанные значения, а не повторяет объекты. Кто-нибудь может предложить решение, я видел людей, подходящих к этой проблеме с критериями, но основная проблема в том, что я не делаю никаких ассоциаций между этими классами, поэтому я не думаю, что это сработает.
Я застрял с этой проблемой уже больше недели, одно очень простое решение, которое приходит мне в голову, но на самом деле не оптимально, заключается в выполнении для каждого l oop, подобного этому (сохраняя его как последнее решение):
//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);