Нет добавления сущности в многотоновых отношениях с использованием Spring boot и jpa - PullRequest
1 голос
/ 23 сентября 2019

Я новичок в весенней загрузке, мне нужна помощь в решении этой проблемы: у меня есть две сущности, связанные ManytoOne отношением .Сущности - это курс и профессор.

Профессор Сущность:

@Entity
@Table(name = "professor")
public class Professor implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long idProfessor;
    private String name;
    private String lastName;
    private String phone;
    private String mail;

    @Fetch(FetchMode.JOIN)
     @OneToMany(mappedBy = "professor", cascade= CascadeType.ALL)
        private List<Course> courses;


    public Professor() {

    }

    public Long getIdProfessor() {
        return idProfessor;
    }

    public void setIdProfessor(Long idProfessor) {
        this.idProfessor = idProfessor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

}

Сущность курса:

@Entity
@Table(name = "course")
public class Course implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long idCourse;
    private String title;
    private String description;

     @ManyToOne
        @JoinColumn(name="professor_id")
        private Professor professor;

     @ManyToMany(mappedBy = "courses")
        private List<Student> students;

    public Course() {}

    public Long getIdCourse() {
        return idCourse;
    }

    public void setIdCourse(Long idCourse) {
        this.idCourse = idCourse;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }


}

Я также создал контроллер отдыха, чтобы создать курс, и яопределенная конечная точка POST, такая как:

@PostMapping(value="/create")
    public Course createCourse(@RequestBody Course course) {
        return courseRepo.save(course);
        }

Когда я добавляю новый курс в почтальоне, курс добавляется, но он не назначается соответствующему профессору (существующему профессору в базе данных), "idProfessor" - этовсегда присваивается NULL.Вот пример выполнения POST API в почтальоне и результат в MySQL.

почтальон

mysql

Любые предложения

1 Ответ

0 голосов
/ 23 сентября 2019

Вы должны назначить профессора для курса, который собираетесь сохранить.

@PostMapping(value="/create")
public Course createCourse(@RequestBody Course course) {
    course.setProfessor(course.getProfessor()) //set parent for child
    return courseRepo.save(course);
}

Рабочий пример Parent.java

public class Parent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int parentId;
    private String name;

    @OneToMany(mappedBy="parent",fetch=FetchType.LAZY,cascade = CascadeType.PERSIST)
    private List<Child> child = new ArrayList<Child>();
}

Child.java

public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int childId;
    private String account;

    @ManyToOne(fetch = FetchType.LAZY, targetEntity = Parent.class)
    @JoinColumn(name="parentId", referencedColumnName = "parentId", nullable = false)
    private Parent parent;

}

Controller.java

        @PostMapping(value = "/onetomanyPID")
        public String OneToMany(@RequestBody Child child)
        {
            child.setParent(child.getParent());
            childRepository.save(child);
            return "saved";

            /*{
            "account":"3",
             "parent":{
                 "parentId":"1",
                  "name":"Romil"
              }
            }*/
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...