2011-01-03 5 views
2

특정 테이블의 모든 열에 대한 변경 내용을 추적하고자합니다. 다음 열을 사용하여 다른 테이블에 변경 사항을 저장하는 것으로 생각했습니다. id, field, and datafield (문자열 값)은 변경된 대상 테이블의 열이고 data은 해당 필드의 새 값입니다.ORM을 사용하는 동안 db 필드의 변경 내용 추적

데이터 세트를 반환 할 때 대상 테이블의 원래 데이터를 검색하고 테이블 추적 변경 사항의 변경된 값을 변경 한 다음 Java의 리플렉션 기능을 사용하여 변경된 필드의 값을 가장 최근 변경된 값으로 설정한다고 생각했습니다.

  1. 내 접근 방식은 의미가 있습니까 :

    나는 다음과 같은 질문이 상기 내용을 토대로? 원하는 결과를 얻는 더 좋은 방법이 있습니까?
  2. JPM 2를 사용하여 ORM을 처리하고 있습니다. 최종 목표를 달성하는 데 도움이 될 수있는 ORM 기능이 있습니까? JPA 2.0 스펙은 엔티티 감사에 관한 아무것도하지 않는

감사

답변

3

확인 최대 절전 모드 envers 엔티티 감사에 대한 EclipseLink가 역사적 세션 .. ..

+0

당신이 최대 절전 모드를 사용한다면, 당신은 확실히 체크 아웃해야합니다. 그것은 hibernate의 이벤트 메카니즘을 사용하여 쉽게 통합 될 수 있고, 설정하는데 많은 노력을 필요로하지 않는다. Envers는 매우 강력하며 완벽한 객체 그래프의 감사를 처리 할 수 ​​있습니다. 또한 이력 데이터를 쉽게 쿼리 할 수 ​​있습니다. – Thomas

+0

& @Thomas : 기본 구현으로 최대 절전 모드를 사용하고 있으므로 Envers를 살펴보고 내가 원하는 것을 정확하게 수행합니다. 헤즈 업에 감사드립니다. – NKing253

1

귀하의 접근 방식은 괜찮습니다. 다양한 데이터 유형 (예 : 날짜, 텍스트, 긴 텍스트)을 다루기 위해 많은 "데이터"필드가 필요할 수 있습니다.

이 문제를 해결하기 위해 (롤백 기능을 쉽게 제공하기 위해) 수행 할 작업은 xstream 및 텍스트 diff 엔진을 사용하는 것입니다. xstream을 사용하여 pojo의 XML 스냅 샷을 가져온 다음 사용자의 편집을 적용한 다음 다른 라이브러리를 가져옵니다. 두 스냅 샷을 비교하고 diff 텍스트를 저장합니다. 또한 약간의 노력으로 위키 스타일로 수정본을 인쇄 할 수 있습니다.

+0

이것은 내가 생각하고있는 것입니다. 어떤 텍스트 엔진을 사용 했습니까? Java로 사용할 수 있습니까? xstream에서 xml 출력이 1MB 이상이면 성능은 어떻습니까? 고맙습니다. –

관련 문제