Ограничение внешнего ключа @ManyToMany отношение, предотвращающее удаление - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть три связанные записи (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 выглядит следующим образом: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...