【问题标题】:how to write a hql to get all records without permissions如何编写一个hql来获取所有没有权限的记录
【发布时间】:2013-02-04 16:43:46
【问题描述】:

我有三张桌子

Project
   id, name
ProjectAuthorization
   id,  project_id, user_id , permission
User
   id, name

项目.java

@OneToMany(mappedBy = "project", cascade = CascadeType.ALL)
private List<ProjectAuthorization> permissions;

用户.java

@OneToMany(mappedBy = "user",cascade =CascadeType.ALL)
private List<ProjectAuthorization> permissions;

ProjectAuthorization.java

@ManyToOne()
private Project project;
@ManyToOne()
private User user;

我想获取当前用户没有任何权限的所有项目,如何通过hibernate查询编写?

更新

hql 像这样:

select p from Project as p left join p.permissions as pa where pa.user.id!=:userid and p.id not in (select pa2.project.id from ProjectAuthorization as pa2 where pa2.user.id=:userid)");

【问题讨论】:

  • 这些表之间有关联映射吗?
  • 是的,项目有OneToMany权限,用户也有OneToMany权限
  • 让我们看看它们的映射关系

标签: sql hibernate hql


【解决方案1】:

例如可以使用以下查询(也是有效的 JPQL,没有使用特定于 Hibernate 的构造):

SELECT p
FROM Project p
WHERE p.id NOT IN
  (SELECT authorization.project.id
   FROM ProjectAuthorization authorization
   WHERE authorization.user = :currentUser)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2020-11-23
    • 2016-03-09
    • 1970-01-01
    • 2021-12-01
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多