2017-10-17 8 views
0

私はHibernate(4.2)+ Springコンボの真の初心者です。管理者ポータルでCRUD管理を容易にするためにこれらを使用するサブアプリケーションで作業するように任されているので、私はおそらく非常に基本的なステップ。Enversによって収集されたデータをどのように視覚化する必要がありますか?

特定の@Entityフィールドで監査ログを行うために、Hibernate-Enversをプロジェクトにロードしました。 @Auditedを追加した後、Enversは期待通りに動作し、_audテーブルにデータを追加します。

私の目標は、このエンティティに対するすべてのリビジョンのリストを管理者に表示することです。どのように私はそれについて行く必要がありますか分からない。私がこれまで試したどのような

..です

  1. は、私はいくつかの新しい サービスを介してすべてのリビジョンのリストを供給する AuditReaderを使用想像新しいリポジトリのクラスを作成します。しかし、履歴オブジェクト自体に新しい エンティティを追加せずにこの作業を行うことはできませんでした。これはおそらく ではないと感じました。
  2. エンティティの既存のコントローラでAuditReaderを使用しようとしました。 AuditReaderを作成するには、私はコントローラにオートワイヤリングしようとしたsessionFactoryが必要でしたが、オートワイヤリングが失敗したので、これは正しいことではありませんでした。

* _audテーブルは、Webページ上でエンドユーザーにそれらを表示するためにenversからデータを収集するための好ましい構造は何ですか?

答えて

1

AuditReaderを使用して新しいサービスを通じてすべてのリビジョンのリストを提供すると想像した新しいリポジトリクラスを作成します。しかし、Historyオブジェクト自体に新しいEntityを追加しなければ、この作業を行うことはできませんでした。これはおそらく行く方法ではないと感じました。

は、私たちがこのようないくつかの本当に愚かな基本的な実体を持っていると仮定しましょう:あなたは両方ここでエンティティ型としてBasicEntityを使用する2つのリポジトリ/ DAOコンポーネントを構築することができるはず

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

が、両方これらのインスタンスとは内部的に非常に異なる動作をします。

あなたのビジネスリポジトリコンポーネントがSessionまたはEntityManagerが注入されただろうし、あなたが#persist#mergeを呼び出して、これらのインスタンスを操作するためにそれを使う、など

あなたの監査リポジトリコンポーネントもSessionまたはEntityManager注入さを持っているだろうが、それを使用します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); 
} 
関連する問題