Получение нулевого значения в столбце сопоставления в Hibernate двунаправленный ManytoOne, OnetoMany - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь создать двунаправленное отображение OnetoMany, ManytoOne.Ниже приведены классы сущностей StudentAddress и класс Student3:

Класс сущности Student3:

@Entity
@Table(name="Student3", schema="cf_2583f365_c3c6_499a_a60d_138e7e7023eb")
public class Student3 {
@Id
@Column(name = "STUDENT_ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int student_id;

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

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="student_address_id",referencedColumnName="address_id")
/*@JoinColumn(name = "student_address_id")*/
private StudentAddress studentAddress;


@Override
public String toString() {
    return "Student3 [student_id=" + student_id + ", STUDENT_NAME=" + student_name + "]";
}

public int getStudent_id() {
    return student_id;
}

public void setStudent_id(int student_id) {
    this.student_id = student_id;
}

public String getStudent_name() {
    return student_name;
}

public void setStudent_name(String student_name) {
    this.student_name = student_name;
}

public StudentAddress getStudentAddress() {
    return studentAddress;
}

public void setStudentAddress(StudentAddress studentAddress) {
    this.studentAddress = studentAddress;
}

public Student3() {

}

}

Класс сущности адреса студента:

@Entity
@Table(name="StudentAddress", schema="cf_2583f365_c3c6_499a_a60d_138e7e7023eb")
public class StudentAddress {

@Id
@Column(name = "address_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int address_id;

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

@OneToMany(cascade=CascadeType.ALL,mappedBy = "studentAddress")
private List<Student3> students;



@Override
public String toString() {
    return "StudentAddress [address_id=" + address_id + ", address_detail=" + address_detail + ", students="
            + students + "]";
}

public int getAddress_id() {
    return address_id;
}

public void setAddress_id(int address_id) {
    this.address_id = address_id;
}

public String getAddress_detail() {
    return address_detail;
}

public void setAddress_detail(String address_detail) {
    this.address_detail = address_detail;
}

public List<Student3> getStudents() {
    return students;
}

public void setStudents(List<Student3> students) {
    this.students = students;
}


public StudentAddress() {

}

}

При сохранении данных из объекта Student3Я могу сохранить данные, как это:

enter image description here

enter image description here

Но когда я сохраняюданные со стороны StudentAddress, я получаю нулевое значение в столбце student_address_id:

enter image description here

enter image description here

Код для сохранения данных со стороны Student3, адрес StudentAddress:

/**************SAVE STUDENT Address Controller*************************/
@RequestMapping(value="/saveStudentAddress", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
public String savestudentaddress (@RequestBody StudentAddress s1) {

    System.out.println(s1);
    studentaddressRepository.save(s1);
    return "success";
}

/**************SAVE STUDENT3 Controller*************************/
@RequestMapping(value="/saveStudent3", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
public String savestudent (@RequestBody Student3 s1) {

    System.out.println(s1);
    student3Repository.save(s1);
    return "success";
}

Json для сохранения данных со стороны Student3:

{
    "student_id" :123, 
    "student_name": "avijit kumar Mamod",

    "studentAddress":{
                    "address_id" : 123,
                    "address_detail" : "209 - Berlington Street"
                    }           
}

Json для сохранения данных со стороны StudentAddress:

{
"address_id" : 123,
"address_detail" : "209 - Berlington Street",
"students": [{
            "student_id" :123, 
            "student_name": "avijit kumar Mamod"
           }]
}

Ответы [ 3 ]

0 голосов
/ 23 декабря 2018

Измените свой код saveStudentAddress, как показано ниже, и попробуйте

@RequestMapping(value="/saveStudentAddress", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
public String savestudentaddress (@RequestBody StudentAddress s1) {
    System.out.println(s1);

    for(Student s: s1.getStudents()){
      s.setAddress(s1);
    }

    studentaddressRepository.save(s1);
    return "success";
}
0 голосов
/ 21 июля 2019

Теперь сегодня, при удалении mappedBy со стороны StudentAddress и установке @JoinColumn (name = "student_address_id"), когда я пытался сохранить со стороны studentAddress, это добавило значение в БД student_address_id.

studentAddress выглядит такэто сейчас:

@OneToMany(cascade=CascadeType.ALL/*,mappedBy = "studentAddress"*/)
@JoinColumn(name="student_address_id")
private List<Student3> students;

Я не уверен, почему это произошло.У меня нет дополнительного кода, как предложено abhi в ответе выше.Контроллер теперь очень прост:

@RequestMapping(value="/saveStudentAddress", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
public String savestudentaddress (@RequestBody StudentAddress s1) {
    System.out.println(s1);
   studentaddressRepository.save(s1);
    return "success";
}
0 голосов
/ 23 декабря 2018

Не пишите OneToMany в обоих классах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...