HQL - не использовать перебор значений
Есть метод
public void updateRole(Set<String> roles, User user) {
Set<Role> updateUserRoles = new HashSet<>();
for (String roleName : roles) {
updateUserRoles.add(roleDao.getRoleByName(roleName));
}
user.setRoleSet(updateUserRoles);
}
Подскажите как лучше исключить обращение к базе в цикле с помощью использования HQL.
ВХОДНЫЕ ДАННЫЕ :
Set roles, которая содержит имена вроде ROLE_USER, ROLE_ADMIN ...
На выходе необходимо получить :
Set roles которые были получены из БД.
т.е. что-то вроде :
@Override
public Set<Role> getRoleSet(Set<String> role) {
return entityManager.createQuery("SELECT roleSet FROM Role r WHERE roleSet.name in (:roleStringSet)")
.setParameter("roleStringSet", role)
.getResultList();
}
только возвращался бы Set )
Ответы (1 шт):
Автор решения: Васька
→ Ссылка
@Override
public Set<Role> getRoleSet(Set<String> role) {
return new HashSet<>(entityManager.createQuery("SELECT r FROM Role r WHERE r.name in (:roleStringSet)")
.setParameter("roleStringSet", role)
.getResultList());
}