spring-boot - 如何在用户-角色-权限中配置oneToMany映射

标签 spring-boot jpa spring-data-jpa spring-data one-to-many

我有一个带有 spring data jpa 的 Spring Boot 应用程序(Spring Boot 2)。我有 3 个 MYSQL 表来存储用户信息、角色和权限

  • 用户将包含基本的用户详细信息,例如用户名、密码、名字、姓氏。
  • Role 代表用户角色,如 Admin、User、Staff、test(用户可以有多个角色)
  • 权限有3种可能:读、写、自定义(每个角色有多种权限)
  • UserRole - 用户和角色的联合表
  • RolePermission - 角色和权限的联合表

正在寻找 Spring boot 服务,如果用户未根据用户表进行验证,该服务将返回 false,如果用户验证成功,则响应应包含用户角色和权限。

我能够构建示例休息服务,但无法设置以下内容

  1. 如何为本需求中的 oneToMany 映射配置实体类
  2. 存储库界面中相应的查询是什么

请查看实体表

@Entity
@Table( name = "TURBINE_USER" )
public class PortalUser {

public PortalUser() {

}

public PortalUser(long userID ,String userName , String password , String firstName, String lastName, String email) {
    this.userID = userID;
    this.userName = userName;
    this.password = password;
    this.firstName = firstName;
    this.lastName = lastName;
    this.email =  email;
}


@Id
@Column(name="USER_ID",unique=true)
private long userID;

@NotNull
@Column(name="LOGIN_NAME",unique=true)
private String userName;

@NotNull
@Column(name="PASSWORD_VALUE")
private String password;

@NotNull
@ColumnDefault("")
@Column(name="FIRST_NAME")
private String firstName;

@NotNull
@ColumnDefault("")
@Column(name="LAST_NAME")
private String lastName;

@Column(name="EMAIL")
private String email;

@Column(name="CONFIRM_VALUE")
private String confirmValue;

@NotNull

@Column(name="CREATED")
private Timestamp createdDt;

@NotNull

@Column(name="MODIFIED")
private Timestamp modified;

@NotNull
@Column(name="LAST_LOGIN")
private Timestamp lastLogin;

@Column(name="DISABLED")
private char disabled;

@Column(name="OBJECTDATA")
private byte[]  objectData;

@NotNull
@Column(name="PASSWORD_CHANGED")
private Timestamp passwordChanged;
 // getters and setters
}


@Entity
@Table(name =  "TURBINE_ROLE")
public class Role {
    @Id
    @Column(name=  "ROLE_ID",unique  = true)
    private long roleId;

    @Column(name= "ROLE_NAME")
    private String roleName;

}


@Entity
@Table(name ="TURBINE_PERMISSION")
public class Permission {

    @Id
    @Column(name=  "PERMISSION_ID")
    private long permissionId;

    @Column(name= "PERMISSION_NAME")
    private String name;
}

@Entity
@Table(name= "TURBINE_USER_GROUP_ROLE")
public class UserRoles {

    @Column(name="USER_ID")
    private PortalUser user;

    @Column(name="ROLE_ID")
    private Role roles;
}


@Entity
@Table(name="TURBINE_ROLE_PERMISSION")
public class RolePermission {

    @Column(name= "ROLE_ID")
    private Role roleId;

    @Column(name= "PERMISSIONID")
    private Permission permissionId;
}

最佳答案

用户和角色、角色和权限实体之间是多对多关系。您不应将 Join 表定义为实体,它们是由 JPA 实现生成/管理的。

例如,用户和角色实体的 ManyToMany 注释:

public class PortalUser {
    ...

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "User_Role",
        joinColumns = {@JoinColumn(name = "user_id")},
        inverseJoinColumns = {@JoinColumn(name = "role_id")})
    private Set<Role> roles;
}

使用 CMobileCom JPA 进行测试.

免责声明:我是CMobileCom JPA的开发者,一个针对 Java 和 Android 的轻量级 JPA 实现。

关于spring-boot - 如何在用户-角色-权限中配置oneToMany映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52226516/

相关文章:

java - 禁用 Spring Boot 参数解析

java - 使用 Maven 的 Spring Boot Web 应用程序不返回 HTML 页面

hibernate - 如何注释 id 使其在没有 SEQUENCE 表的情况下自动递增?

java - Eclipse Indigo - JPA 验证问题

java - entityManager.createNativeQuery 不返回类型化结果

spring-data - JpaRepository vs CRUDRepository findAll

java - 无法在Intellij Idea的Springboot项目上通过模板创建jsp文件

java - 在 Spring Boot 2.2.5 应用程序中上传文件时出现 MalformedStreamException

sql - 带有内部 SELECT 语句的 JPA Criteria Builder 查询

hibernate - 如何将构造函数映射与 Spring JPA 存储库结合使用