Java Criteria API Query, чтобы определить, содержит ли объект какие-либо из тех же ролей, что и пользователь (сравнивая два списка)
Template
Объект имеет список ролей и виден только этим ролям. Я хочу обновить существующий запрос, чтобы он возвращал только те шаблоны, которые имеют хотя бы одну из тех же ролей, что и предоставленный пользователь, я не уверен, как использовать критерии API по существу написать
SELECT template.* FROM TEMPLATE template
JOIN TEMPLATE_ROLE_LIST join_table on template.id = join_table.template_id
WHERE join_table.role_id in (<--List of Role ID's -->);
И, возможно, сделать результат отличным, так как шаблоны с более чем одной совпадающей ролью для пользователя будут производить дубликаты.
Session hibernateSession = getHibernateSession();
User user = hibernateSEssion.getUser();
List<Roles> rolesList = user.getRoles();
//Explicitly showing the user and roles objects ^
CriteriaBuilder criteriaBuilder = hibernate.getCriteriaBuilder();
CriteriaQuery<Template> criteriaQuery = criteriaBuilder.createQuery(Template.class);
Root<Template> root = criteriaQuery.from(Template.class);
//How do I say here `Select Template where Template.roles contains any object in rolesList?
criteriaQuery.select(root);
hibernate.createQuery(criteria).list();
List<Template> Templates = hibernate.createQuery(criteriaQuery).list();
return templates;