У меня есть две таблицы: одна таблица классов, которая является родительской таблицей, а другая таблица учеников, которая является дочерней таблицей в двунаправленном отображении @OneToMany:
@Entity
@Table
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@IdClass(ClassId.class)
public class Class implements Persistable<ClassId> {
@Id
private String className;
@Id
private String classId;
@Column
private String classContent;
@JsonIgnore
@OneToMany(mappedBy = "class_fk",cascade = CascadeType.ALL)
private List<Student> studentList;
@Override
public ClassId getId() {
return new classId//using builder
}
@Override
public boolean isNew() {
return true;
}
}
Другая таблица учеников:
@Entity
@Table
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
@IdClass(StudetnId.class)
public class Student implements Persistable<StudetnId> {
@Id
@Column
private String studentName;
@Id
@Column
private String studentGroup;
@Id
@ManyToOne
@JoinColumns ({
@JoinColumn(
name = "className",referencedColumnName = "className"),
@JoinColumn(
name = "classId",referencedColumnName = "classId")
})
private Class class_fk;
@Column
private String displayName;
@Column
private String active;
@Override
public StudentId getId() {
return new StudentId//using builder
}
@Override
public boolean isNew() {
return true;
}
}
И класс студенческого идентификатора является составным ключом, который содержит class, studentName и studentGroup, где данные внутри класса, т.е. className и classId, являются как внешним ключом, так и первичным ключом.
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentId implements Serializable {
private Class class;
private String studentName;
private String studentGroup;
}
Проблема в том, что всякий раз, когда я выполняю studentRepo.save (studentEntity), он вставляет данные как в таблицу, т. Е. В таблицу классов, так и в таблицу учеников.
Требуется, чтобы мы вставляли в таблицу учеников, чей внешний ключт.е. имя класса и идентификатор класса не существует в таблице классов, тогда hibernate должен выдать ошибку вместо вставки в обе таблицы.
Class classOne = Class.builder().className("Sec-B").classID("111").build();
Student student = Student.builder().studentName("Niladri").studentGroup("Science").class_fk(classOne).displayName("ScienceBackground").active("true").build().
studentRepo.save(student);
Сначала вставьте в класс, а затем вставьте в ученика.