У меня есть два класса TempResult и Result, которым нужно много-к-одному между ними.Tempresult имеет составной ключ.Результату также нужны все атрибуты в составном ключе TempResult, кроме одного, чтобы быть его первичным ключом.
С @ManyToOne, включенным в TempResult, структура таблицы будет в порядке, если в @JoinColumn установлены вставные = ложные и обновляемые = ложные.Но это не позволяет делать новые записи в таблице TempResult.Если он не включен, возникает ошибка, в которой говорится о повторяющихся столбцах.
Так выглядят мои классы.
Я пытался без установки вставляемого и обновляемого значения false, но затем столбцы повторяютсяи возникает ошибка.
@Entity
@Table(name = "tempResult")
public class TempResult {
@EmbeddedId
private TempIdentity tempIdentity;
@Convert(converter = BooleanConverter.class)
@Column(name = "attendance",nullable = false)
private boolean attendance;
@Column(name = "marks")
private int marks;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "registrationNo",insertable=false,updatable = false),
@JoinColumn(name="courseId",insertable=false,updatable = false),
@JoinColumn(name="year",insertable=false,updatable = false),
@JoinColumn(name="semester",insertable=false,updatable = false)
})
Result result;
}
//Composite id class
@Embeddable
public class TempIdentity implements Serializable {
@NotNull
@Column(name = "registrationNo")
private String registrationNo;
@NotNull
@Column(name = "courseId")
private String courseId;
@NotNull
@Column(name = "year")
private int year;
@NotNull
@Column(name = "semester")
private int semester;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId",referencedColumnName = "userId")
User user;
}
Все атрибуты, кроме userId, необходимы в таблице результатов.
@Entity
@Table(name="result")
public class Result {
@EmbeddedId
private ResultIdentity resultIdentity;
@NotNull
private int marks;
}
// составной ключ таблицы результатов
@Embeddable
public class ResultIdentity implements Serializable {
private String registrationNo;
private String courseId;
private int year;
private int semester;
Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`rms_db`.`#sql-113c_95`, CONSTRAINT `FKa683jvhkm50n035ib6ojqlbu7` FOREIGN KEY (`registration_no`, `course_id`, `year`, `semester`) REFERENCES `result` (`course_id`, `registration_no`, `semeste)
Мне нужно вставить данные в таблицу TempResult. Но это мешает.Может кто-нибудь помочь, пожалуйста ???