插入子项和父项 JSON Spring 启动

Insert in child and parent JSON Spring Boot

我的 spring 启动应用程序数据中有 3 个实体,应用程序用户、教师和学生

  1. 应用用户

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name= "appuserId", updatable=false)
    private Long appuserId;     
    @Column(name = "username")
    private String username;
    
    @Column(name = "fullname")
    private String fullName;
    
    @Column(name = "email")
    private String email;   
    
    @Column(name = "password")
    private String password;
    
    @OneToOne(mappedBy = "appuser")
    private Teacher teacher;
    
    @OneToOne(mappedBy = "appuser")
    private Student student;
    
  2. 老师

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "teacherId" , updatable = false)
    private Long teacherId;
    
    @Column(name= "firstname")
    private String firstName;
    
    @Column(name = "lastname")
    private String lastName;
    
    @Column(name="designation")
    private String designation;
    
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "appuserId", nullable = true)
    private Appuser appuser;
    
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval=true ,mappedBy="teacher")
    @JsonIgnore
    private List<Course> courses;
    
  3. 学生

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name= "studentId", updatable=false)
    private Long studentId;
    
    @Column(name = "firstName")
    private String firstName;
    
    @Column(name = "lastName")
    private String lastName;
    
    @Column(name = "enrolledSince")
    private String enrolledSince;
    
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "appuserId", nullable = false)
    private Appuser appuser;
    
    @OneToMany(cascade = CascadeType.ALL,orphanRemoval=true, mappedBy="student")
    @JsonIgnore
    private List<CourseStudent> courseStudents;
    

我可以在 appusers table 中使用 json 格式在 postman 中插入并且运行良好。但是当我尝试插入教师或学生 table 时,appusers 中的结果为空。它不应该为空,因为应用用户的教师和学生外键。

这不应该发生。当您保存教师或学生时,您应该指定数据库中已经存在的 appuser。并使用appuserId代替Appuser,这足以识别它属于哪个appuser。

保存教师或学生并请求加入数据库后,您可以获取您的appuser。

当您尝试插入教师或学生 table 时,请确保您在坚持时将值设置为 appuser。

Student std =new Student();
// create an object of appuser,set its vaue and assign it to student object
 Appuser ap = new Appuser();
 // assigning values to the appuser object as ap.setfullname="...";... so on
 std.setAppuser=ap;

现在保留这个学生对象,条目将反映在映射中 table 或者您可以在已经持久化的 std 对象中设置 appuser 的 id。