У меня есть три связанные записи (Conference
, SubmissionRecord
, SubmissionAuthorRecord
). Каждый SubmissionRecord
имеет объект Conference
и имеет List<SubmissionAuthorRecord>
.
. Когда я удаляю запись Конференции, если SubmissionRecord связана с этой Конференцией, она также должна каскадироваться и удаляться. Тем не менее, я получаю сообщение об ошибке java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`viz`.`submission_record_author_set`, CONSTRAINT `FKgnqq52l26bitkmojk1oiuaki1`
FOREIGN KEY (`submission_record_s_id`) REFERENCES `submission_record` (`s_id`))
.
Таблица submission_record_author_set
создается автоматически, и у меня нет сущности, которая сопоставляется с ней.
Я понимаю, что проблема заключается в том, чточто строки submission_record_author_set
препятствуют удалению SubmissionRecord
и пытались описать метод @PreRemove, описанный здесь ( Как удалить сущность с отношением ManyToMany в JPA (и соответствующими строками таблицы соединения)? ), ноно безрезультатно. Может быть, есть проблема с аннотацией ManyToMany? Причина Я также не вижу эквивалентной аннотации в SubmissionAuthorRecord.
@Entity
public class SubmissionRecord {
@Id
@GenericGenerator(name = "UseExistingIdOtherwiseGenerateUsingIdentity", strategy = "xyz")
@GeneratedValue(generator = "UseExistingIdOtherwiseGenerateUsingIdentity")
@JsonSerialize(using = ToStringSerializer.class)
@Column(name = "s_id")
private Long id;
@Exportable(name = "Submission Id", nameInDB = "s_submission_id")
@Column(name = "s_submission_id")
private String submissionId;
// internal set of authors of the associated
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JsonIgnore
private List<SubmissionAuthorRecord> authorSet;
@JoinColumn(name="conference_id")
@ManyToOne(fetch = FetchType.EAGER)
@OnDelete(action = OnDeleteAction.CASCADE)
private Conference conference;
//...
}
@Entity
public class Conference {
@Id
@GenericGenerator(name = "UseExistingIdOtherwiseGenerateUsingIdentity", strategy = "xyz")
@GeneratedValue(generator = "UseExistingIdOtherwiseGenerateUsingIdentity")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private String creatorIdentifier;
private String conferenceName;
private String conferenceYear;
}
@Entity
public class SubmissionAuthorRecord {
@Id
@GenericGenerator(name = "UseExistingIdOtherwiseGenerateUsingIdentity", strategy = "xyz")
@GeneratedValue(generator = "UseExistingIdOtherwiseGenerateUsingIdentity")
@JsonSerialize(using = ToStringSerializer.class)
@Column(name = "s_author_id")
private Long id;
private String dataSet;
@Column(name = "s_author_name")
private String name;
}
Таблица submission_author_record_set
выглядит следующим образом: