簡體   English   中英

Hibernate:如何刪除具有額外屬性的多對多關系中的實體

[英]Hibernate: how to delete entities in many-to-many relationships with extra attributes

我有以下關系:

@OneToMany(fetch = FetchType.EAGER, mappedBy="note", cascade = CascadeType.REMOVE, orphanRemoval = true)
private Set<Review> reviews = new HashSet<>();

Note.java

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

Expert.java 中

如您所見,它們指的是 Review 類,它表示 Note 和 Expert 之間的 M 到 N 關系。 由於我需要為此關系添加額外的屬性,因此我創建了一個 ReviewId 類和一個 Review 類,如下所示:

@Embeddable
public class ReviewId implements Serializable {

    @Column(name = "fk_note")
    protected Long noteId;

    @Column(name = "fk_expert")
    protected Long expertId;

    [...]
}

@Entity
public class Review {
    @EmbeddedId
    private ReviewId id;

    private int value;

    private String comment;

    @ManyToOne
    @JoinColumn(name = "fk_note", insertable = false, updatable = false)
    private Note note;

    @ManyToOne
    @JoinColumn(name = "fk_expert", insertable = false, updatable = false)
    private Expert expert;

    [...]
}

當我嘗試刪除出現在此關系中的注釋或專家時,出現以下錯誤:

Cannot delete or update a parent row: a foreign key constraint fails (`db_example`.`review`, CONSTRAINT `FKls65s9wl28v98ts2kifir37p7` FOREIGN KEY (`fk_note`) REFERENCES `note` (`id`))

當我刪除某個注釋/專家時,如何讓 Hibernate 刪除與它們相關的所有評論? 謝謝!

這可以通過FluentJPA完成:

long noteId; //passed as a parameter

FluentQuery query = FluentJPA.SQL((Review review) -> {

    DELETE().FROM(review);
    WHERE(review.getId().getNoteId() == noteId);
});

...
query.createQuery(em).executeUpdate();

暫無
暫無

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

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