Hibernate не может сопоставить много учеников в классе - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть 2 простых объекта: студент и класс.Я хочу отправить ученика, где я указываю класс, к которому он принадлежит, но я застрял в отображении гибернации.

ClassModel.class

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


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

@NotEmpty
@Size(max = 20)
@Column(name = "name")
private String name;

@Column(name = "tables")
private int tables;

@Column(name = "chairs")
private int chairs;

@Column(name = "teacher")
private String teacher;
(getters + setters)

StudentModel

@Entity
@Table(name = "student")
public class StudentModel implements Serializable {

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

@NotEmpty
@Column(name = "name")
@Size(max = 50)
private String name;

@Column(name = "age")
private int age;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id")
private ClassModel classModel;
(getters + setters)
}

StudentController.java

...
@Autowired
private StudentService studentService;

@Autowired
private ClassService classService;

@PostMapping(value = "/save")
public StudentModel save(@RequestBody StudentModel studentModel){
    ClassModel classModel = classService.findById(studentModel.getClassId()).get();
    studentModel.setClassModel(classModel);
    return studentService.save(studentModel);
}
...

Но когда я делаю запрос от Почтальона со следующим телом:

{
    "name": "some name",
    "age": 12,
    "class_id": 1
}

В hibernate появляется следующая ошибка:

Column 'class_id' cannot be null

Где ошибка в моем отображении hibernate?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Это то, как я сделал рабочее соединение в спящем режиме. Посмотрите:

TrainingEntity.java

@Id
private Integer id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "animal_id", nullable = false, insertable = false, updatable = false)
private AnimalEntity animalEntity;

@Column(name = "animal_id")
private Integer animalId;

AnimalEntity.java

@Id
private Integer id;

@OneToMany(mappedBy = "animalEntity", fetch = FetchType.LAZY)
private List<TrainingEntity> trainingEntityList = new ArrayList<>();

Итак, вот соединение между AnimalEntity и TrainingEntity. У AnimalEntity есть список TrainingEntities.

1 голос
/ 08 апреля 2019

Ошибка в этой строке:

"class_id": 1

Вы используете имя столбца вместо имени поля.Вам придется заменить class_id на classModel, где classModel будет объектом.Другим решением было бы найти ClassModel по id из json и установить его в качестве родителя на StudentModel.

...