У меня есть приложение Spring Boot, использующее Spring Data REST и Spring Data JPA.У меня есть две предметные области: ученик и классная комната, где много студентов могут принадлежать к одной классной комнате
Ученик:
@Data
@Entity
@Table(name = "STUDENT")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "STUDENT_ID")
private Integer studentId; // This Id has been setup as auto generated in DB
@Column(name = "ROOM_ID")
private Integer roomId;
@ManyToOne
@JoinColumn(name = "ROOM_ID", nullable = false, updatable = false, insertable = false)
private Classroom classroom;
}
Класс:
@Data
@Entity
@Table(name = "CLASSROOM")
public class Classroom {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ROOM_ID")
private Integer roomId; // This Id has been setup as auto generated in DB
@OneToMany(mappedBy = "classroom")
private List<Student> studentList;
.....// other fields related to a classroom
}
И хранилище Student:
public interface StudentRepository extends CrudRepository<Student , Integer>{
List<Student> findByClassroom(@Param("room") Classroom room);
}
И хранилище Classroom:
public interface ClassroomRepository extends CrudRepository<Classroom , Integer>{
}
И у меня есть основной файл SpringApplication, но нет контроллера.
В таблице CLASSROOM уже есть одна классная комната с номером комнаты = 1.Когда я отправил следующий запрос POST на http://localhost:8080/students,, в таблице учеников была создана новая запись ученика, которая, как я ожидал, потерпит неудачу, потому что в CLASSROOM не существует классной комнаты с id = 100.
Итак, мой вопрос заключается в следующем: может ли Spring Data JPA принудительно установить отношение manyToOne, или это принудительное применение внешнего ключа должно выполняться на стороне базы данных ( столбец not-null ROOM_ID в таблице Student НЕ определенв качестве внешнего ключа нашим администратором базы данных для законного рассмотрения).Если это необходимо сделать на стороне базы данных, какой смысл определять отношение manyToOne в файлах сущностей?
Кроме того, я знаю, что у меня есть избыточные поля класса в сущности Student, я просто не знаю, какие из них оставить в сущности Student (поле roomId или поле "classroom"), потому что когда я создаюстудент, я хочу дать только номер комнаты в запросе.Спасибо!
{
"roomId": 100 // I expect this request to fail because no roomId=100 in the CLASSROOM table.
}