当前位置: 首页 > 知识库问答 >
问题:

使用spring数据jpa按角色查找用户

宰父玄天
2023-03-14

我的用户实体

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    @ElementCollection
    private List<String> roles = new ArrayList<>();
}

每个用户都可以有许多角色。给定一个角色(以字符串数据类型表示),我想获取具有此角色的所有用户。

例如

角色为“admin”的User1

角色为“user”的User2

角色为“admin”的User3

对于角色“admin”,我想得到User1和User2。

我对Spring Data Jpa的尝试:

public interface UserRepository extends JpaRepository<User, Integer> {
    public List<User> findByRoles( String role);
}

但我得到了豁免

组织。冬眠LazyInitializationException:未能延迟初始化角色com的集合。Spring证书。securityconfig。使用者角色,无法初始化代理-无会话

共有2个答案

裴英才
2023-03-14

这里从用户到角色是One-TO-MANY映射
即角色列表是用户实体的一个元素,您正在传递一个字符串作为角色列表。
这就是您获得异常的原因。

解决:

>

  • 使用findByRolesIn(列表

    @Column(nullable = false)
    private String role;
    

    或者,使用JPA查询或原生查询,如下所示。

    @Query( "select u from User u  where u.roles in :roles" )
    public List<User> findByRoles(@Param("roles") List<String> roles);
    

  • 孙梓
    2023-03-14

    在您的UserRepository中以这种方式使用

    import org.springframework.data.jpa.repository.JpaRepository;
    
    import java.util.Collection;
    import java.util.List;
    
    public interface UserRepository extends JpaRepository<User, Long> {
        List<User> findByRolesIn(Collection<String> names, Pageable pageable);
    }
    

    在控制器中

    @GetMapping(value = "/api/usersByRole/{userRole}")
    public List<User> getUser(@PathVariable String userRole, Pageable pageable){
        return userRepository.findByRolesIn(Arrays.asList(userRole), pageable);
    }
    
     类似资料:
    • 我想要编写一个Spring Data JPA存储库接口方法签名,它将允许我查找实体中具有嵌入对象属性的实体。有没有人知道这是否可能,如果可能,如何实现?

    • 我目前正在使用Spring启动在Java中开发一个Web应用程序。 我在应用程序中使用的内容: MySQL作为数据源 ORM的HibernateJPA Thymeleaf模板 目前,我的数据库有一个用户和角色表。登录、注册和会话工作正常。 我在网站上创建了一个仅限管理员的页面。 我在为用户创建和使用角色时遇到了问题。 我希望数据库中的每个用户都有一个角色,并且能够在站点上使用它。注册时的默认角色是

    • 我正在实施一个具有以下实体的用户管理系统: 这是角色类: 我想获取属于特定角色的所有用户,并且还能够添加有关姓名、手机、电子邮件以及寻呼等的动态where子句。 我当前的代码如下所示,用于使用动态where子句和分页获取用户的选定字段: 我在这里遇到两个问题: 如何获取具有特定角色的所有用户?假设我需要查找角色ROLE_ID = “ROLE_ADMIN”的所有用户。 在我的分页实现中,中的最后一项

    • 问题内容: 以下代码仅用于演示目的。 我的 实体 bean看起来像这样 该 嵌入式 类: 我可以编写 JPARepository 接口方法以通过EmbeddedId查找雇员,该方法也返回我的结果。 问题: 假设在查询时我只有 employeeId 和 branchName ,并且我不想在 departmentName 上放置过滤器 __ 在这种情况下,如何编写我的存储库方法 JPA是否有针对这种情

    • 我如何才能实现以下代码的等价: ...但是使用Spring和Spring-Data-JPA注释? 我现有代码的基础是: 但是我不知道如何指定方法中的所有内容都应该使用悲观锁集来完成。 有一个Spring Data JPA注释,它允许您设置,但我不知道将它放在方法上是否有效。这听起来更像是上的注释,因为Javadoc说: org.springframework.data.jpa.repository

    • 我正在两个应用程序之间进行基准测试,一个是用构建的,另一个是用构建的。总体而言,差异不太大(小于一个数量级)。唯一的例外是当我通过主键获取记录时 使用JDBC的时间不超过10毫秒,使用Hibernate的时间从不低于60毫秒。我已经安装了ehcache,但是对于这个特定的查询,差异仍然是一样的<有没有什么我不知道的技巧? ---编辑 JPA映射和类是使用Hibernate工具构建的,它们没有什么特