簡體   English   中英

在Hibernate中使用@MappedSuperClass進行軟刪除

[英]Soft delete with @MappedSuperClass in Hibernate

我有一個抽象基類A ,它是一個@MappedSuperClass 同樣,有幾個實體類從A類擴展。 A包含一個名為STATUS的屬性,它表示是否刪除一條記錄。

@MappedSuperclass
public abstract class A {

    @Id
    private Long id;

    @Column(nullable = false)
    private boolean status = true;

}

我想要的是能夠使用@SQLDelete批注對類A所有子類執行軟刪除。 例如,我有一個B extends AB extends A並且每當我對B類調用delete時,我都希望它更新數據庫上該記錄的狀態。

@Entity
@Table(name = "TempTable")
@SQLDelete(sql = "update TempTable set STATUS = 0 where ID = ?")  //Basically, I don't want 
                                                                  //to write this in every 
                                                                  //class. Instead write 
                                                                  //it to class A once.
@Where(clause = "STATUS = 1")
public class B extends A {
    private String alpha;
}

現在,我可以進行軟刪除,但是為此,我必須在每個類中編寫@SQLDelete批注。 我不想重復,只想在基類A編寫一次。 在那里它將更新該記錄的狀態。

這可能嗎? 如果是,我該如何實現?

提前致謝。

如果必須使用@SQLDelete,那么恐怕沒有解決方案。

我已經設法在不使用@SQLDelete的情況下使用spring-data-jpa + hibernate和映射的超類實現了軟刪除機制,但是它需要創建自己的BaseRepository實現以覆蓋SimpleJpaRepositoryImpl,然后用您的softdelete替換delete方法實施。

spring-data文檔( 此處)中對此進行了很好的描述。

暫無
暫無

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

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