我一直在尋找一段時間,我還沒有找到任何迴應我的問題。JPA標準JOIN et ON
我提出在JSF,的EclipseLink,Glassfish的應用程序中,用戶可以有一個或多個組。該應用程序包含模塊和權限如下:
- 模塊=>權限=> utilisateur
- 模塊=>權限=> GROUPE => utilisateur
我尋找條件查詢(未在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