是否可以在同一方法中创建带有 AND 而不带实体 类 的查询? (JPA + 休眠)
Is it possible to create queries with AND without entity classes in the same method? (JPA + Hibernate)
我尝试定义一个查询方法,但我目前遇到了问题。我试图进行的查询是获取我的数据库中的所有用户但过滤掉具有管理员角色的用户。我有一个实体 class 用于 User
,另一个实体用于 Role
。我的 User
class 包含用户 ID、用户名和电子邮件的字段,而 'Role' 实体包含角色 ID 和角色名称作为字段。在我的用户 class 实体中,我定义了一个多对多关系,定义如下:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable( name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
要注意的是,这也是生成 user_roles table 的地方,所以我没有与 user_roles.[=17 相关的实体 class =]
所以基本上我想知道是否有可能在同一方法中创建一个使用带和不带权利的值的查询,以及我是否需要在其中使用准备好的语句?
@Query("SELECT u.id,u.username,u.email FROM User u,Role r, user_role ur WHERE u.id=ur.id AND r.id=ur.id AND r.name<>\'ADMIN\'")
List<User> getUsers();
我目前遇到错误 user_role is not mapped [SELECT u.id,u.username,u.email FROM com.Application.models.User u,com.Application.models.Role r, user_role ur WHERE u.id=ur.id AND r.id=ur.id AND r.name<>'ADMIN']
。
您可以使用 JPA 内部联接执行此操作。它将为您遍历连接table。
@Query("SELECT u.id, u.username, u.email FROM User u join u.roles r where r.name <> 'ADMIN'")
我尝试定义一个查询方法,但我目前遇到了问题。我试图进行的查询是获取我的数据库中的所有用户但过滤掉具有管理员角色的用户。我有一个实体 class 用于 User
,另一个实体用于 Role
。我的 User
class 包含用户 ID、用户名和电子邮件的字段,而 'Role' 实体包含角色 ID 和角色名称作为字段。在我的用户 class 实体中,我定义了一个多对多关系,定义如下:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable( name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
要注意的是,这也是生成 user_roles table 的地方,所以我没有与 user_roles.[=17 相关的实体 class =]
所以基本上我想知道是否有可能在同一方法中创建一个使用带和不带权利的值的查询,以及我是否需要在其中使用准备好的语句?
@Query("SELECT u.id,u.username,u.email FROM User u,Role r, user_role ur WHERE u.id=ur.id AND r.id=ur.id AND r.name<>\'ADMIN\'")
List<User> getUsers();
我目前遇到错误 user_role is not mapped [SELECT u.id,u.username,u.email FROM com.Application.models.User u,com.Application.models.Role r, user_role ur WHERE u.id=ur.id AND r.id=ur.id AND r.name<>'ADMIN']
。
您可以使用 JPA 内部联接执行此操作。它将为您遍历连接table。
@Query("SELECT u.id, u.username, u.email FROM User u join u.roles r where r.name <> 'ADMIN'")