Я создал две таблицы - ученическая и предметная.Затем я создал третью таблицу student_subject, которая представляет собой объединенную таблицу для связи учащихся с предметами.Он имеет 5 полей: идентификатор строки, идентификатор студента, идентификатор субъекта и поля create_at и updated_at (которые получены из класса AuditModel):
package com.rest.web.postgresapi.data.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.persistence.*;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = {"student_id", "subject_id"})
})
public class StudentSubject extends AuditModel {
@Id
@GeneratedValue(generator = "enrollment_generator")
@SequenceGenerator(
name = "enrollment_generator",
sequenceName = "enrollment_sequence",
initialValue = 4420
)
private Long id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "student_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Student student_id; // If I put private Long student_id, it fails
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "subject_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Subject subject_id; // If I put private Long subject_id, it fails
// Constructors
protected StudentSubject() {}
public StudentSubject(Student student_id, Subject subject_id) {
this.student_id = student_id;
this.subject_id = subject_id;
}
// Getters
public Long getId() {
return id;
}
public Student getStudent_id() {
return student_id;
}
public Subject getSubject_id() {
return subject_id;
}
// Setters
public void setId(Long id) {
this.id = id;
}
public void setStudent_id(Student student) {
this.student_id = student;
}
public void setSubject_id(Subject subject) {
this.subject_id = subject;
}
}
Приложение прекрасно создает таблицы в базе данных, и я могу получитьи пост в студенческих и предметных столах.Нет проблем с этим.Боль приходит с контроллером для объединенного стола.
Это контроллер для таблицы объединенного стола student_subject
package com.rest.web.postgresapi.controllers;
import com.rest.web.postgresapi.data.models.StudentSubject;
import com.rest.web.postgresapi.repository.StudentSubjectRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
@RestController
public class StudentSubjectController {
@Autowired
private StudentSubjectRepository studentSubjectRepository;
@GetMapping("/enrollments")
public List<StudentSubject> getAllStudentsSubjects(){
return studentSubjectRepository.findAll();
}
@PostMapping("/enrollments/student/subject")
public StudentSubject createStudentSubject(@Valid @RequestBody StudentSubject studentSubject) {
return studentSubjectRepository.save(studentSubject);
}
}
Есть две проблемы:
1 .-когда я получаю данные из таблицы student_subject, он получает только идентификатор строки, а также поля create_at и updated_at.Нет ни student_id, ни subject_id.
ответ от get
2 .- Когда я делаю сообщение (от почтальона), чтобы вставить строку, я получил следующую ошибку:
Detail: Failing row contains (4671, 2018-11-20 11:04:34.176, 2018-11-20 11:04:34.176, null, null).
Я предоставляю и student_id, и subject_id, как вы можете видеть на этом скриншоте от почтальона, но ошибка ясно говорит о том, что оба поля равны нулю:
почтальон
Кажется, мое определение таблицы как-то неверно.Чего мне не хватает в моем коде?