잠시 동안 검색했지만 문제에 대한 응답을 찾지 못했습니다.JPA Criteria JOIN et ON
사용자가 하나 이상의 그룹을 가질 수있는 JSF, EclipseLink, Glassfish에서 응용 프로그램을 만들고 있습니다.
- 모듈 => 권한 => utilisateur
- 모듈 => 권한 => Groupe의 => utilisateur 내가 criteria 질의를 찾고 있어요
(하지 : 다음과 같이 응용 프로그램 모듈과 권한을 포함 jqpl)를 사용하여 사용자의 모든 모듈을 가져옵니다. 나는 다음과 같이 매우 잘 작동하는 SQL 쿼리를 만들었습니다.
SELECT *
FROM core_module m
WHERE m.id IN (
SELECT m.id
FROM core_module m
INNER JOIN modules_permissions mp
ON mp.modules_id = m.id
INNER JOIN core_permission p
ON p.id = mp.permissions_id
INNER JOIN users_permissions up
ON p.id = up.permissions_id
INNER JOIN core_user u
ON u.id = 1
)
OR m.id IN (
SELECT m.id
FROM core_module m
INNER JOIN modules_permissions mp
ON m.id = mp.modules_id
INNER JOIN core_permission p
ON p.id = mp.permissions_id
INNER JOIN groups_permissions gp
ON gp.permissions_id = p.id
INNER JOIN core_group g
ON g.id = gp.groups_id
INNER JOIN users_groups ug
ON g.id = ug.groups_id
INNER JOIN core_user u
ON u.id = ug.users_id
WHERE u.id = 1
)
저는 이것을 대충 성공시키지 않고 기준 쿼리로 변환하려고합니다. 방금 쿼리의 첫 번째 부분을 시작 했으므로 사용자가 모듈에 즉시 액세스 할 수 있습니다. 나는 어떤 조건이 없거나 조인이 없다는 인상을받습니다. 나는 어떤 결과도 얻지 못할 때 2 가지 결과를 얻고 있습니다. 실제로 ON
절을 포함 할 수 없기 때문에 엔티티가 존재하지 않기 때문에 내 쿼리에서 조인을 변경할 수 없습니다. 테이블 modules_permissions
이 내 엔티티의 @ManyToMany
에 의해 생성되었습니다 ...
List<Module> modules;
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Module> query = cb.createQuery(Module.class);
Root<Module> root_module = query.from(Module.class);
Root<User> root_user = query.from(User.class);
Root<Permission> root_permission = query.from(Permission.class);
Root<Group> root_group = query.from(Group.class);
Join<Module, Permission> join_module_permission = root_module.join(Module_.permissions);
Join<Permission, User> join_permission_user = root_permission.join(Permission_.users);
query.where(cb.equal(root_user.get(User_.email), current.getEmail()));
modules = getEntityManager().createQuery(query).getResultList();
안녕하세요 Archi, 이것은 영어로 말하는 포럼입니다. 나는 당신의 질문을 번역하려고 시도했습니다. 앞으로는 영어로 질문과 답변을 게시하십시오. –
번역 해 주셔서 감사합니다. – Archi