首页 > 解决方案 > 如何在发送 post 方法时修复“尝试从空的一对一属性分配 id”?

问题描述

我创建了 2 个具有 OnetoOne 映射和共享主键的表,我尝试通过两个 post 方法将数据发送到这些表,但出现错误:

试图从空的一对一属性 [com.maciejg.School02.model.LoginAndPassword.studentsTeachersEntity] 分配 id

实体:

@Entity
@Table(name="usersinfo")
public class StudentsTeachersEntity {

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

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

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

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

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

    @Column(name = "phone_number")
    private String phoneNumber;

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

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

    @OneToOne(mappedBy = "studentsTeachersEntity", cascade = 
        CascadeType.ALL)
    private LoginAndPassword loginAndPassword;

        //getters, setters


@Entity
@Table(name="userandpassword")

public class LoginAndPassword {

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

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

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

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

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

    @OneToOne
    @JoinColumn
    @MapsId
    private StudentsTeachersEntity studentsTeachersEntity;

角类:

export class AddUserComponent implements OnInit {
  model: StudentsTeachers = {
    id: 0,
    name: '',
    surname: '',
    username: '',
    pesel: '',
    phoneNumber:'',
    address:'',
    email:''
  };

  login: LoginAndPassword = {
    id:0,
    username:'',
    user_password:'',
    grade:'',
    comment:''
  };


  constructor(private apiService: ApiService) { }

  ngOnInit() {
  }

  send(){
    this.apiService.addUser(this.model).subscribe(
      res => {
          alert("User added");
          //location.reload();
      },
      err => {
        alert("Error while sending value");
      }
    );
} 

sendToLoginPasswordEntity(){
  this.apiService.addLoginAndPassword(this.login).subscribe(
    res => {
     // location.reload(); //reload page
      alert("OK")
      location.reload();
    },
    err => {
      alert("Sth go wrong");
    }
  );
}

方法 send() 起作用并向 usersinfo 表添加值,但第二种方法会导致标题中描述的错误。

部分 HTML 表单代码:

<form #f="ngForm" (ngSubmit)="f.form.valid  && sendToLoginPasswordEntity(); send()" >

<div class="field">
    <label class="label">Pesel</label>
    <div class="control">
      <input class="input" name="pesel" placeholder="pesel"
      [(ngModel)]="model.pesel"
      [(ngModel)]="login.user_password"
      #pesel="ngModel"
      [ngClass]="{'is-danger': f.submitted && pesel.invalid}"
      required />

标签: javaangularspringspring-data-jpa

解决方案


推荐阅读