В Spring MVC приложения, используя спящий режим и MySQL, я написал следующий метод запроса возвращает список имен с пациентами:jpql остался присоединиться выборки не возвращать результаты для как
@SuppressWarnings("unchecked")
public Collection<Person> findPersonByLastName(String ln) throws DataAccessException{
Query query = this.em.createQuery("SELECT DISTINCT pers FROM rimPerson pers left join fetch pers.names nm WHERE nm.family LIKE :lnm");
query.setParameter("lnm", ln);
return query.getResultList();
}
Это производит следующее спящий режим SQL:
Hibernate:
select distinct
person0_.hppid as hppid1_340_0_,
names1_.HJID as HJID1_89_1_,
person0_2_.classCode_HJID as classCod2_339_0_,
person0_1_.administrativeGenderCode_HJID as administ2_341_0_,
person0_1_.birthTime_HJID as birthTim3_341_0_,
names1_.DELIMITER_ as DELIMITE2_89_1_,
names1_.FAMILY as FAMILY3_89_1_,
names1_.named_entity_hppid as named5_89_1_,
names1_.SUFFIX as SUFFIX4_89_1_,
names1_.name_entity_HJID as name9_340_0__,
names1_.HJID as HJID1_89_0__
from
rim_person person0_ inner join rim_living_subject person0_1_ on person0_.hppid=person0_1_.hppid
inner join rim_entity person0_2_ on person0_.hppid=person0_2_.hppid
inner join rim_infrastructure_root person0_3_ on person0_.hppid=person0_3_.hppid
left outer join EN names1_ on person0_.hppid=names1_.name_entity_HJID
where names1_.FAMILY like ?
Когда я вызвать выше метод jpql с помощью следующей команды, она возвращает нулевой результат:
this.myappService.findPersonByLastName("");
Я также получаю нулевые результаты, когда я вырезал и пропустил выше сгенерированный спящий код в клиенте командной строки MySQL и заменил ?
на ''
.
Если, однако, я удаляю where names1_.FAMILY like ?
из сгенерированного спящего режима sql выше и помещаю сокращенный sql в клиент командной строки MySQL, я получаю четыре результата, каждый из которых имеет значение для поля lastname.
Как изменить jpql так, чтобы он генерировал запрос на спящий режим, который возвращает четыре результата, когда `` передается как пустой параметр строки? Я хочу, чтобы результирующий набор включал каждый результат, когда пользователь вводит пустой ввод, но дает отфильтрованные результаты, когда пользователь вводит данные в любом заданном текстовом вводе.
Следующие действия: 'query.setParameter (« lnm », ln +«% »);' Я не использовал ваш код, потому что я хочу, чтобы это было изолировано в репозитории, чтобы максимизировать повторное использование. Но я даю +1 и благодарю за ответ, потому что ты указал мне в правильном направлении. Спасибо. – CodeMed