簡體   English   中英

為什么讓FetchType.EAGER阻止刪除對象?

[英]Why is having FetchType.EAGER preventing the deletion of an object?

我發現了一些非常奇怪的東西。 當我使用注釋時

@OneToMany(fetch = FetchType.EAGER, mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
List<LeaveQuery> leaveQueryList;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "FK_account", nullable = true)
private Account account;

我不再能夠從數據庫中刪除一個LeaveQuery。 當我將任一側的FetchType.EAGER更改為LAZY時,它將成功刪除,但是我需要雙方都使用FetchType.EAGER。

有人對此有解決方法嗎?

問候

編輯:

這是我的清除代碼:

public ResponseEntity<?> delete(@PathVariable long custId) {
    log.info("entering deleteleaverequest");
    LeaveQuery deleteLeaveQuery = leaveQueryRepository.findOne(custId);
    log.info("condition" + deleteLeaveQuery.getStatus().equals("Onbehandeld"));
    if (!deleteLeaveQuery.getStatus().equals("Onbehandeld"))
        return ResponseEntity.badRequest().build();

    leaveQueryRepository.delete(deleteLeaveQuery);
        accountService.sendLeaveRequestCanceledNotification(deleteLeaveQuery);
    return ResponseEntity.ok().build();
}

我已經找到問題的原因

如果該子對象仍位於父對象的子對象列表中(在我的情況下為Account,則leaveQuery是leaveQuerylist中的子對象),則該子對象仍將處於休眠狀態。 因此,我通過應用此代碼解決了我的問題。

deleteLeaveQuery.getAccount().getLeaveQueryList().removeIf(a-> a.getId() == custId);

從“帳戶”內的“離開查詢”列表中刪除要刪除的離開查詢后,便能夠成功刪除。

刪除請假查詢的另一種方法是先獲取與此請假查詢關聯的帳戶,然后從“請假​​查詢列表”中刪除請假查詢,然后保存該帳戶。 如果Account在其OneToMany批注中具有CascadeType.ALL,它將自動從數據庫中刪除從列表中刪除的請假查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM