2017-11-03 7 views
0

새로 생성 된 개체 항목에 대한 수정을 얻을최대 절전 모드 Envers :</p> <pre><code>@Entity @Audited public class MyEntity { ... } </code></pre> <p>및 서비스 계층에서 생성 방법 : 내가 감사 법인이

@Transactional 
public MyDto createMyEntity() { 
    MyEntity newEntity = new MyEntity(); 
    newEntity = repository.save(newEntity); 

    // {1} 

    return toDto(newEntity); // {2} 
} 

{2}에 MyEntity 필드를 기존지도 해당 MyDto 필드.

public class MyDto { 
    ... 
    private int revisionNumber; 
    // getters and setters 
    ... 
} 

내 목표 유효한 revisionNumbercreateMyEntity()MyDto에서 반환하는 것입니다하지만이 단계에서이 정보를 검색 할 수 없습니다 :

MyDto

는 또한, revisionNumberMyEntity과 같은 필드로 구성되어 있으며, 새 MyEntity이 데이터베이스에 실제로 작성되지 않았기 때문에 {1}

이 문제도 아니라 당신이 직면 문제는 Envers이 트랜잭션의 전 완성에 감사 동작 큐의 플러시는 사실과 관련이 하나입니다 .. 일반적으로

답변

0

을 거래를 최대 절전 모드로 Envers 관련되지 않을 수 있습니다 콜백은 커밋이 발생하기 바로 전에 발생합니다.

몇 가지 옵션이 있습니다.

  • 트랜잭션 커밋 후에 DTO를 구성 할 수 있도록 코드를 재구성하여 필요한 개정 번호에 대한 Envers 감사 기록 ​​테이블을 쿼리 할 수 ​​있습니다.
  • Envers 감사 기록 ​​테이블 쿼리를 수행하고 부분적으로 구성된 DTO에 개정 번호를 삽입하는 afterCommit에 대한 동기화 콜백을 등록하려면 Spring의 TransactionSynchronizationManager을 사용하십시오.
  • 스프링의 최신 @TransactionEventListener 접근 방식을 사용하면 동일한 afterCommit 로직을 수행 할 수 있지만 더 깨끗한 방법으로 디커플링을 적용한으로 간주합니다.