2

我正在使用SpringHibernate作为JpaRepository数据库存储库。

我有两个用于用户存储的类:

@Entity
public class User {
    @Id
    private Long id;

    private String username;

    private String password;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<UserRole> roles;
}

@Entity
public class UserRole {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @Enumerated(EnumType.STRING)
    private Role role;
}

public enum Role {
    ADMIN,
    MEMBER;
    /* some others in the future */
}

如您所见User,可以分配多个角色。所以user1可以有ADMINMEMBER角色,user2只有MEMBER角色。

我想具有ADMIN角色的用户(除其他外)可以列出数据库中的所有用户(JpaRepository findAll()方法就足够了),但只有MEMBER角色的用户可以只列出具有MEMBER角色的用户。

如何编写方法JpaRepository来实现?我在下面尝试了一些,但它不起作用:

List<User> findByRoles_RoleIn(Collection<Role> roles);

或者

List<User> findByRoles_Role(Role role);

也许有些习俗@Query

4

4 回答 4

4

如果您可以进行自定义查询,请尝试以下操作:

@Query( "select u from User u inner join u.roles r where r.role in :roles" )
List<User> findBySpecificRoles(@Param("roles") List<Role> roles);
于 2017-02-08T13:29:26.150 回答
1

如果您不想使用 @query

按角色对象查询

List<User> findByRoles_(Role role);

按角色对象id查询

List<User> findByRoles_Id(Long id);
于 2019-03-26T14:15:12.017 回答
0

对于这种情况,您需要使用自定义 jpql 查询。并使用自定义查询实现两种方法,一种用于管理员,一种用于简单用户。就像是

@Query("SELECT u FROM User u JOIN u.roles r WHERE r.role=:rolename")

于 2017-02-08T13:30:41.010 回答
-1

如果要在 JPA 中检索具有角色名称列表的用户,可以在存储库中添加以下方法。

List<User> findByRoles_NameIn(List<String> roles);
于 2020-06-21T10:42:25.880 回答