【问题标题】:Insert in child and parent JSON Spring Boot插入子和父 JSON Spring Boot
【发布时间】:2020-02-01 12:25:59
【问题描述】:

我的 Spring Boot App 数据休息中有 3 个实体,Appusers、Teacher 和 Student

  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;
    

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

【问题讨论】:

    标签: spring spring-boot spring-data-jpa postman spring-data-rest


    【解决方案1】:

    当您尝试在教师或学生表中插入时,请确保您在持久化时将值设置为 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;
    

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

    【讨论】:

      【解决方案2】:

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

      您可以在保存教师或学生并请求加入数据库后获取您的应用用户。

      【讨论】:

      • 但是如何插入教师并自动插入appuser?像在 json 中
      • 您不必这样做。这是一个糟糕的模式。照我回答的去做。但是,如果您愿意,在您的 RestController 方法中首先保存 appuser,通过您的服务方法获取 appuserId,然后保存教师或学生。保存appuser之前不能保存teacher,因为不能指定appuserId。首先按照我的描述来获取它。
      猜你喜欢
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2014-11-05
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多