JPA:在数据库中添加用户时,不会自动设置外部 ID

问题描述 投票:0回答:1

我有 2 类用户和权限 我希望当用户注册时,权限表中的 fk 会自动设置为创建的用户 ID

authorities table

user table

用户类别:

@Entity
@Table(name = "user")
public class User {

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

@Column(name = "username")
private String username;

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

@Column(name = "enabled")
private Byte enabled = 1;

@JsonManagedReference
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Authorities> authorities = new ArrayList<>();

权威类:

@Entity
@Table(name = "authorities")
public class Authorities {


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

    @Column(name = "username")
    private String username;

    @Column(name = "authority")
    private String authority;

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

这是注册的控制器:

@PostMapping("registration" )
public String addUser(@ModelAttribute ("addUser") User user){
    String username = user.getUsername();
    String password = user.getPassword();
    userService.save(user);
    Authorities authorities = new Authorities(username,"ROLE_USER");
    authoritiesService.save(authorities);

    return "redirect:registration";
}

方言:

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

编辑:

我尝试过这个解决方案:

Authorities authorities = new Authorities(username,"ROLE_USER",user);

但我不知道是否正确,或者 fk 应该自动分配

spring spring-boot spring-mvc spring-data-jpa spring-data
1个回答
0
投票

您甚至不需要调用authoritiesService.save(authorities)来保存您的权限,您需要执行与编辑部分中所做的相反的操作: 将权限添加到用户对象,保存用户,权限将自动保存(前提是您正确映射了它们)。

@PostMapping("registration" )
public String addUser(@ModelAttribute ("addUser") User user){
    String username = user.getUsername();
    String password = user.getPassword();
    Authorities authorities = new Authorities(username,"ROLE_USER");
    user.getAuthorities().add(authorities);
    userService.save(user);
    return "redirect:registration";
}
© www.soinside.com 2019 - 2024. All rights reserved.