2017-03-02 11 views
0

하나의 특정 테이블에 대한 삽입이 성공할 경우 2 테이블 (감사 테이블)에 레코드를 삽입해야하는 매우 독특한 요구 사항이 있습니다. 여기 리스너가 항상 동일한 트랜잭션에서 호출되기 때문에 Listener에서 @PreInsert에 대해 언급하지 않습니다. 첫 번째 저장이 성공한 후 단순히 "save"메서드를 호출하여 수동으로 수행 할 수 있음을 알고 있습니다. 하지만 JPA/EclipseLink/String-data를 사용하여 Listener를 사용해 볼 수있는 다른 방법이 있는지 알고 싶었습니다. 응용 프로그램의 향후 개발자가 수동으로 감사 테이블에 데이터를 삽입하도록 강요하지 않았습니다.메소드 호출 후 트랜잭션 커밋

기본적으로 @PostCommit 유형의 기능을 찾고 있습니다. 도와주세요.

답변

0

내가 방금 최대 절전 모드가 최대 절전 모드 Envers 작품처럼 그 일을 수행 한 후에는 를 실행하려면, 당신은 궁극적으로 콜백이 현재의 트랜잭션 (transaction)의 경계 내에서 실행 싶어 생각합니다.

는이 작업을 수행하려면, 당신은 기본적으로 다음과 같은 이벤트 조치 큐 콜백을 등록해야합니다 :

session.getActionQueue().registerProcess(
    new BeforeTransactionCompletionProcess() { 
    @Override 
    public void doBeforeTransactionCompletion(SessionImplementor session) { 
     // do whatever you want with the session here. 
    } 
    } 
); 

당신이 궁극적으로 외부 트랜잭션을 코드 를 실행해야하는 경우, 당신은 비슷한 할 수 :

session.getActionQueue().registerProcess(
    new AfterTransactionCompletionProcess() { 
    @Override 
    public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) { 
     // do whatever you want with the session here. 
    } 
    } 
); 

어느 쪽이든 가야합니다.