Ответ 1
Параметры внутри строковых литералов не разрешаются.
Вам нужно добавить %
к значениям параметров с помощью конкатенации строк - либо со стороны программы
String QUERY = "FROM Person as p WHERE p.createUser = : createUser
AND p.personId in " +
"(SELECT pn.personId FROM PersonName pn " +
"WHERE pn.personNameType = 'FIRST' " +
"AND pn.name LIKE :firstName)";
(List<Person>)session.createQuery(QUERY)
.setString("createUser", createUser)
.setString("firstName", "%" + firstName + "%").list();
или на стороне базы данных:
String QUERY = "FROM Person as p WHERE p.createUser = : createUser
AND p.personId in " +
"(SELECT pn.personId FROM PersonName pn " +
"WHERE pn.personNameType = 'FIRST' " +
"AND pn.name LIKE CONCAT('%', :firstName, '%'))";
(List<Person>)session.createQuery(QUERY)
.setString("createUser", createUser)
.setString("firstName", firstName).list();