У меня есть отношение OneToMany:
public class Class1{
private String attr1;
private String attr2;
@OneToOne
private Class2 object1;
}
public class Class2{
private String attr3;
}
Отношение может хранить нулевые объекты (я имею в виду, что экземпляр Class1 может иметь значение null в object1).Я хочу выполнить полный поиск по всем атрибутам, поэтому я создал этот запрос HQL:
SELECT p FROM Class1 p
WHERE
(
upper(p.attr1) LIKE :filter OR
upper(p.attr2) LIKE :filter OR
upper(p.object1.attr3) LIKE :filter
)
, и я передаю строковый параметр в верхнем регистре с "%" до и после:
query.setParameter("filter", "%"+filter.trim().toUpperCase()+"%");
Работает нормально, но для сущностей, у которых object1 = null.Это никогда не получит те лица.Действительно, если я удаляю последнее условие (верхнее (p.object1.attr3) LIKE: filter), оно работает, но мне нужно его включить.
Хотя я должен выполнить LEFT JOIN с этим отношением, поэтому яЯ пытался написать это как:
SELECT p FROM Class1 p LEFT JOIN p.object1 AS p1
WHERE
(
upper(p.attr1) LIKE :filter OR
upper(p.attr2) LIKE :filter OR
upper(p1.attr3) LIKE :filter
)
или как
SELECT p FROM Class1 p LEFT JOIN p.object1 AS p1
WHERE
(
upper(p.attr1) LIKE :filter OR
upper(p.attr2) LIKE :filter OR
(p1 is not null AND upper(p1.attr3) LIKE :filter)
)
, но безуспешно.
Есть идеи?
Спасибо.