2017-03-20 10 views
0

를 업데이트하지 않습니다 업데이트의봄 JpaRepository 내가 다음 JPARepo 코드가 테이블

@Service 
@Slf4j 
@Transactional(readOnly = true) 
public class MyService { 
@Autowired 
    private MyObjectRepository myObjectRepository; 

    // some methods here 

    @Transactional 
    public void deleteMyObject(MyObject myObject) { 
    ** first way ** 
    myRepository.deleteById(myObject.getMyObjectId()); 
    ** second way ** 
    myObject.setDeleted(true); 
    myObjectRepository.save(myObject); 
    } 

    //some methods here 

} 

두 가지 방법이 한 번만 실행됩니다. 다음에 메서드를 호출 할 때 삭제 열의 엔터티 값은 기본적으로 false이며 업데이트 후에는 false로 유지됩니다. 그러나 디버그에서 테이블을 단계별로 볼 때 삭제 된 열이 true로 설정되어 있고 디버그를 릴리스 할 때 삭제 플래그가 false로 다시 설정되는 것을 볼 수 있습니다. 캐싱 중이거나 부정확 한 주석을 달았습니까?

+0

일부 예외가 발생하고 롤백이 –

+0

@RC 발생합니다. 아니, 모두 확실하다 –

+1

업데이트 쿼리를 실행하면 개체 모델에 직접 반영되지 않습니다. 특정 업데이트 쿼리를 실행 한 후에는 데이터베이스에서 개체를 강제로 다시로드해야합니다. (최대 절전 모드 인 경우 범위 외부에서 개체 상태를 수정 중입니다). 그래서 '거짓'이라면 응용 프로그램의 경우가 될 것입니다. 다른 것들을 업데이트 (또는 그렇지 않으면 쿼리를 트리거)하면 메모리 내와 db 상태가 다르기 때문에 상태가 재설정됩니다. –

답변

1

클래스 수준에서 @Transactional(readOnly = true)이 모든 메서드에 적용됩니다. 메서드 수준에서 @Transactional(readOnly = false)으로 변경할 수 있습니까?

@Transactional(readOnly = false) 
    public void deleteMyObject(MyObject myObject) { 
+0

실제로'MyService'에 기록됩니다 - 메소드는'Transactional' (기본값은 false)입니다. 또한 클래스 수준에서'readonly = false'로 설정하려고했지만 결과가 없습니다. –

+0

메소드 레벨 ... 어쨌든 클래스 레벨에 넣을 때 작동해야합니다 –

+0

메소드와 클래스 모두 시도 - 결과 없음 –