2017-10-17 55 views
0

我是Hibernate(4.2)+ Spring組合的真正初學者,負責處理子應用程序,它使用這些子程序在管理員門戶中實現一些CRUD管理,因此我可能在非常基本的步驟中迷路了。我應該如何可視化Envers收集的數據?

我已經將Hibernate-Envers加載到項目中,對特定的@Entity字段進行審計日誌記錄。在爲其添加@Audited之後,Envers按預期工作,將數據添加到_aud表中。

我的目標是向管理員顯示此實體的所有修訂列表。我不知道我應該怎麼做。

什麼我試過到目前爲止..

  1. 創建我想象中會使用 AuditReader通過一些新的 服務提供的所有修訂的列表中的新庫類。但是,如果不爲歷史記錄對象本身添加新的實體,我就無法完成這項工作 - 而且我覺得這可能不是要走的路。
  2. 嘗試在實體的現有控制器中使用AuditReader。對於AuditReader的創建,我需要一個sessionFactory,我試圖自動裝入控制器,但事實證明這不是正確的,因爲自動裝配失敗了。

什麼是從envers收集數據* _aud表向他們展示在網頁上最終用戶的首選結構?

回答

1

創建一個新的Repository類,我想使用AuditReader通過一些新的Service來提供所有修訂的列表。但是,如果沒有爲History對象本身添加新的實體,我無法完成這項工作 - 而且我覺得這可能不是一條路。

讓我們假設我們有這樣一些非常愚蠢的基本實體:

@Entity 
@Audited 
public class BasicEntity { 
    @Id 
    @GeneratedValue 
    private Integer id; 
    private String name; 
    ... 
} 

您應該能夠構建都使用BasicEntity爲實體型這裏有兩個存儲庫/ DAO組件,但兩者內部在這些情況下運作非常不同。

您的企業資源庫組件將有SessionEntityManager注射,你用它來操縱這些實例調用#persist#merge

你的審計資源庫組件也將有SessionEntityManager注射,但會使用構建一個AuditReader並查詢審計表。

@Component 
public interface BasicEntityAuditRepository implements AuditRepository<BasicEntity> { 

    @PersistenceContext 
    private EntityManager entityManager; 

    @Override 
    public List<BasicEntity> findByRevision(Long id, Number revision) { 
    final AuditReader auditReader = AuditReaderFactory.get(entityManager); 
    // build whatever query and return the results. 
    } 

} 

public interface AuditRepository<T> { 
    List<T> findByRevision(Long id, Number revision); 
} 
相關問題