You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA问题:用户注册时authorities表外键未自动关联用户ID

用户注册时自动关联Authorities外键的问题

我有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:39:52