簡體   English   中英

Hibernate - 實體審計

[英]Hibernate - Entity audit

我有一個實體,我想跟蹤所有更改,因此我創建了新的實體進行審計。 以下是我的主要實體:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "primary")
public class PrimaryEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "primary_id")
    private Long id;

    private String name;

    @LazyCollection(LazyCollectionOption.FALSE)
    @ElementCollection
    @CollectionTable(
            name = "primary_attachments",
            joinColumns = @JoinColumn(name = "primary_id")
    )
    private List<String> attachments;

    @CreatedDate
    @Temporal(TemporalType.DATE)
    private Date createDate;

    @LastModifiedDate
    @Temporal(TemporalType.DATE)
    private Date lastModifiedDate;
}

以下是我的審計實體:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "primary_audit")
public class PrimaryEntityAudit {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "audit_id")
    private Long id;

    @NotNull
    @Column(name = "primary_entity_id")
    private Long primaryId;

    private String name;

    @LazyCollection(LazyCollectionOption.FALSE)
    @ElementCollection
    @CollectionTable(
            name = "primary_attachments_audit",
            joinColumns = @JoinColumn(name = "primary_entity_id")
    )
    private List<String> attachments = new ArrayList<>();

    @CreatedDate
    @Temporal(TemporalType.DATE)
    private Date createDate;

    public PrimaryEntityAudit(PrimaryEntity primaryEntity) {
        this.primaryId = primaryEntity.getId();
        this.attachments.addAll(primaryEntity.getAttachments());
        this.createDate = new Date();
    }
}

在更新主要實體之前,我創建新的PrimaryEntityAudit並保存此對象,然后更新主要實體。 並且操作成功並保存對象PrimaryEntityAudit,但不保存來自PrimaryEntityAudit的附件。

我也嘗試在ProjectEntityAudit的構造函數中執行setAttachments,但后來我得到了一個例外:HibernateExcpetion:找到了對集合的共享引用。

我應該如何映射審計集合以保存舊的PrimaryEntity附件狀態?

您應該查看以下hibernate模塊Envers

它提供版本控制和審計功能

除非你有技術限制阻止你使用某些框架或其他框架,否則最好不要重新發明輪子。

暫無
暫無

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

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