JPA问题:用户注册时authorities表外键未自动关联用户ID
我有User和Authorities两个实体类,希望在用户注册时,authorities表中的外键fk_user能自动设置为新创建的用户ID。
表结构说明
- user表:包含自增主键
id,以及username、password、enabled字段 - authorities表:包含自增主键
id,username、authority字段,还有关联user表id的外键fk_user
User实体类代码
@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<>(); }
Authorities实体类代码
@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实例时传入user对象:
Authorities authorities = new Authorities(username,"ROLE_USER",user);
但不确定这个方案是否正确,或者外键是否应该自动完成赋值。
内容的提问来源于stack exchange,提问作者Niccolò Balzarotti
相关产品推荐
相关产品推荐

