2017-10-17 7 views
0

저는 관리자 포털에서 CRUD 관리를 용이하게하기 위해 이들을 사용하는 하위 애플리케이션에서 작업하도록 할당 된 Hibernate (4.2) + Spring 콤보에서 진정한 초보자입니다. 그래서 나는 매우 기본적인 단계에서 길을 잃을 것입니다. .Envers에서 수집 한 데이터를 어떻게 시각화해야합니까?

특정 @Entity 필드에서 감사 로깅을 수행하기 위해 Hibernate-Envers를 프로젝트에로드했습니다. @Audited를 추가 한 후 Envers는 예상대로 작동하여 _aud 테이블에 데이터를 추가합니다.

제 목표는이 엔티티에 대한 모든 수정 목록을 관리자에게 표시하는 것입니다. 어떻게해야할지 모르겠습니다. 지금까지 IS 시도했다

..

  1. 내가 몇 가지 새로운 서비스를 통해 모든 버전의 목록을 제공하기 위해 AuditReader을 사용 상상 새 저장소 클래스를 만듭니다. 그러나 History 개체 자체에 새로운 엔터티를 추가하지 않고는이 작업을 수행 할 수 없었습니다. 아마도 이것이 이동 방법이 아닌 일 것입니다.
  2. 엔티티의 기존 컨트롤러에서 AuditReader를 사용하려고 시도합니다. AuditReader를 만들려면 컨트롤러에 autowire하려고했던 sessionFactory가 필요했으나 autowiring이 실패한 것처럼 이것이 옳지 않은 것으로 판명되었습니다. 웹 페이지에서 최종 사용자에게 보여주기 위해 envers에서 * _aud 테이블 데이터를 수집하기위한 기본 구조는

무엇입니까?

답변

1

AuditReader를 사용하여 새로운 서비스를 통해 모든 개정판 목록을 제공하는 새로운 저장소 클래스를 만듭니다. 그러나 History 객체 자체에 새 Entity를 추가하지 않고는이 작업을 수행 할 수 없었습니다. 아마도이 방법이 아닌 것 같았습니다.

우리가이 같은 정말 바보 기본 개체가 있다고 가정하자

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

당신은 모두 여기 엔티티 형으로 BasicEntity을 사용하는 두 개의 저장소/DAO 구성 요소를 구성 할 수 있어야한다, 그러나 모두 내부적으로 그 인스턴스와 매우 다르게 작동합니다.

귀하의 비즈니스 저장소 구성 요소는 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); 
}