Удалить детей с @OneToMany - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть несколько классов:

enter image description here

Изображение:

public class Picture {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "picture", fetch = FetchType.LAZY, orphanRemoval = true)
private Set<AdditionalPictureInfo> additionalInfo = new HashSet<>();

@OneToMany(cascade = CascadeType.ALL, mappedBy = "picture", fetch = FetchType.LAZY, orphanRemoval = true)
private Set<Comment> comments = new HashSet<>();

@OneToMany(cascade = CascadeType.ALL, mappedBy = "picture", fetch = FetchType.LAZY, orphanRemoval = true)
private Set<URLScanResult> urlScanResults = new HashSet<>();

Комментарий:

public class Comment {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name = "picture_id")
private Picture picture;

AdditionalInfo:

public class AdditionalPictureInfo {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name = "picture_id")
private Picture picture;

URLScanResult:

public class URLScanResult {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name = "scan_id")
private URLScan urlScan;

URLScan:

public class URLScan {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


@OneToMany(cascade = CascadeType.ALL, mappedBy = "urlScan", fetch = FetchType.EAGER, orphanRemoval = true)
private Set<URLScanResult> results = new HashSet<>();

В моем случае я хочу удалить изображение, а также связанные комментарии, дополнительныеинформация, и URL сканирует результаты.Все работает с комментариями и дополнительной информацией.Если на ссылку ссылаются из URLScanResults, то возникает следующее исключение:

Caused by: org.h2.jdbc.JdbcSQLException: Referential integrity constraint violation: "FK1AA1C1T58EMNCAAG78CVTYMFH: PUBLIC.URL_SCAN_RESULT FOREIGN KEY(PICTURE_ID) REFERENCES PUBLIC.PICTURE(ID) (3)"; SQL statement:

Я понимаю исключение, но не знаю, почему перед удалением Picture связанные сущности URLScanResult не удаляются.Я полагаю, что проблема в том, что URLScanResult также связан с URLScan.Комментарии и дополнительная информация удаляются.Может кто-нибудь объяснить, почему это происходит и как это исправить?

Я использую весеннюю загрузку и спящий режим.

////////////////////////////////////////////////////////////////////////

Спасибо за комментарии.Для уточнения:

Hibernate: delete from additional_picture_info where id=?
Hibernate: delete from comment where id=?
Hibernate: delete from picture where id=?
2018-11-30 20:21:56.062  WARN 14251 --- [io-10080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 23503
2018-11-30 20:21:56.062 ERROR 14251 --- [io-10080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: update or delete on table "picture" violates foreign key constraint "fk1aa1c1t58emncaag78cvtymfh" on table "url_scan_result"
Detail: Key (id)=(1) is still referenced from table "url_scan_result".

Ищите журналы sql.Комментарии и дополнительная информация удаляются перед удалением изображения.Я знаю, что сначала могу удалить каждый URLScanResult вручную, но почему он автоматически работает с комментариями и дополнительной информацией?

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