2017-06-22 101 views
0

我春天和休眠項目,我配置審計表和其工作正常,但我的問題是我想避免在創建新記錄時審覈,但在做更新時應該我下面的代碼如何避免不必要的審計使用休眠envers

實體審計:

@Entity 
@Table(name = "building") 
@Audited 
public class BuildingClass extends CommonTableFields { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "BID") 
    @JsonProperty 
    private long id; 

    @JsonProperty 
    private String username; 

    @JsonProperty 
    private double count; 
    //getters and setters 
} 

實現: //這裏我不想審覈

@Override 
public void save(BuildingClass buildingclass) { 
     repo.save(buildingclass) 
} 

//這裏我要審覈

@Override 
public void update(BuildingClass buildingclass) { 
     repo.save(buildingclass) 
} 

在此先感謝

+0

請參閱https://stackoverflow.com/questions/12800540/hibernate-envers-how-to-store-only-updated-values – Sudhakar

回答

1

這是要取決於你用什麼樣的策略進行審覈。

DefaultAuditStrategy應該工作,只需不註冊post-insert事件監聽器。你可以通過註冊你自己的envers集成器來做到這一點,它不註冊那個特定的事件處理器。

ValidityAuditStrategy會有點問題。這裏的問題在於,當一行被修改並且這些操作期望初始插入審計行存在時,該策略在內部執行一組更新操作,並且如果它不存在,將會出錯。

您可以使用自定義禁用此檢查的策略來覆蓋此策略,但瞭解檢查是用於檢測審計行的數據問題而不是使用假設。

但所有這些的關鍵是有條件的審計,請參閱參考文件的信息。