У меня есть 3 таблицы: user
, privilege
и user_privilege
.В последней таблице хранятся user_id
и privilege_id
, т.е. информация о пользователях и их привилегиях.Я хочу фильтровать пользователей по привилегиям.Для этого я передаю список идентификаторов привилегий List<Integer> privilegeIDs
в качестве параметра для запроса ниже:
@NamedNativeQuery(name = "User.filterUsersByPrivilges",
query = "SELECT u.username " +
"FROM user u " +
"LEFT JOIN user_privilege up ON u.id = up.user_id " +
"WHERE up.privilege_id IN ?1; ",
resultSetMapping = "userCatalog")
Однако на стороне клиента (Angular 5) иногда я могу оставить этот список привилегий пустым, чтобыизвлекать всех пользователей, независимо от того, имеют ли они привилегию или нет.Здесь я обнаружил, что если я передаю пустой параметр списка в условие IN
, это приводит к ошибке в журналах сервера.Оказывается, при проверке с условием IN
параметр не может быть пустым.
Я попытался передать null
и проверить с помощью WHERE up.privilege_id IN ?1 OR ?1 IS NULL
, но он все еще клянется, что вы не можете передать пустой списокIN
.
Теперь возникает вопрос: как я должен проверить, пуст ли список, чтобы я мог получить всех пользователей, даже если они имеют или не имеют привилегий;в то же время, если параметр не пустой - извлеките тех пользователей, у которых есть права, указанные в параметре списка.
Если у вас есть опыт решения аналогичной проблемы, помогите мне, пожалуйста.Заранее спасибо!