java - Spring Boot 仅在唯一时才将角色添加到数据库

标签 java spring spring-boot jpa

我正在构建一个 Spring Boot 应用程序,它在用户和角色实体之间具有一对多的关系。

用户:

@Entity //Marks class as an entity for JPA
@Table(name="users") //Gives the table a name
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id //Marks variable as id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;
    private String phoneNumber;
    private String address;
    private String email;
    private String password;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name="user_role", joinColumns = @JoinColumn(name = "user_id"),inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Collection<Role> roles;

角色:

@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name="roles") //Gives the table a nam
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    int id;

    String role;

我试图做到这一点,以便当用户使用 CrudRepository 的存储库保存功能保存到数据库中时...

void addUser(User user) {
        userRepository.save(user); //adds new user to db.
    }

...在发送以下 Json 对象时,用户将被添加到数据库中,并且给定的角色类型也会附加到对象:

{
        "name": "John Hancock",
        "phoneNumber": "555-5555-555",
        "address": "address...",
        "email": "John@gmail.com",
        "password": "adhajisdhakjsd",
        "roles":[{
            "role": "Admin"
        }]
    }

以下代码通过将 USER 添加到带有附加 ROLE 的数据库中来工作,但是添加具有相同角色的其他用户,会在数据库内添加一个新的相同 ROLE 行。

问题:有没有办法让新添加的用户只使用已有的 ROLE 而不添加新行?

最佳答案

您可以将“角色”设为主键。但最好不要在这个级别上这样做。

您可以在映射阶段映射角色。

关于java - Spring Boot 仅在唯一时才将角色添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552481/

相关文章:

java - data-th-text 和 th :text in Spring thymeleaf 有什么区别

java - 使用 AES 解密文件时密码 doFinal 填充 block 损坏

java - 尝试调用从另一个类调用另一个方法的方法时出现 StackOverflowError

java - Spring + hibernate Servlet.init() 用于 servlet 调度程序抛出异常

基于 Java spring 的 webapp 与纯 javascript webapp

java - 如何仅通过链接设置 jsp 页面的访问权限

java - 模拟 Apache Commons CSV CSVRecord

java - 在 Apache Tomcat 中更改站点级别配置

Java Jar从命令行启动,但不是从intellij idea启动

java - 如何为两个或更多用户共享一个页面?