Если я правильно понимаю, вы хотите присоединиться к ScheduleRequest
с User
и применить условие in
к свойству userName
сущности User
.
Мне нужно немного поработать над этой схемой. Но вы можете попробовать этот трюк, который гораздо более читабелен, чем код, который вы опубликовали, и избегает части Join
(потому что он обрабатывает логику Join
вне запроса критерия).
List<String> myList = new ArrayList<String> ();
for (User u : usersList) {
myList.add(u.getUsername());
}
Expression<String> exp = scheduleRequest.get("createdBy");
Predicate predicate = exp.in(myList);
criteria.where(predicate);
Для того, чтобы написать более безопасный для типов код, вы также можете использовать метамодель, заменив эту строку:
Expression<String> exp = scheduleRequest.get("createdBy");
с этим:
Expression<String> exp = scheduleRequest.get(ScheduleRequest_.createdBy);
Если это работает, то вы можете попытаться добавить логику Join
в Criteria Query
. Но сейчас я не могу это проверить, поэтому предпочитаю посмотреть, не хочет ли кто-нибудь еще попробовать.