복붙노트

[SPRING] Spring Data JPA로 업데이트 쿼리를 통해 발행 된 변경 사항을 볼 수없는 이유는 무엇입니까?

SPRING

Spring Data JPA로 업데이트 쿼리를 통해 발행 된 변경 사항을 볼 수없는 이유는 무엇입니까?

나는 다음과 같은 봉사를한다 :

@Service
public class CamelService {

    @Transactional
    public aCamelThing() {

          Camel camel = this.camelRepository.findOne(1);

          System.out.println(camel.getCamelName());  // prints "normalCamel"

          // simple hql set field 'camelName'
          int res = this.camelRepository.updateCamelName(1,"superCamel!");

          Camel camelWithNewName = this.camelRepository.findOne(1);

          System.out.println(camelWithNewName .getCamelName());  // prints "normalCamel" ?!?!?

    } 
}

어떻게하면 두 번째 println이 인쇄 할 목표를 달성 할 수 있습니까? "superCamel!" ? 두 번째 호출을 새 트랜잭션으로 분리하는 것은 이상적이지 않습니다.

해결법

  1. ==============================

    1.JPA는 그렇게 작동하도록 정의되어 있습니다.

    JPA는 그렇게 작동하도록 정의되어 있습니다.

    updateCamelName (...)에 대한 업데이트 쿼리를 트리거한다고 가정합니다. JPA 스펙은 갱신 및 삭제 조작에 대해 다음을 명시합니다.

    즉, 이러한 작업의 변경 사항을 확인해야하는 경우 다음 작업을 수행해야합니다.

    이 문제를 해결할 수있는 가장 안전한 방법은 대량 작업에만 업데이트 쿼리를 사용하고 기본적으로 "엔터티, 변경, 병합"접근 방식으로 전환하는 것입니다.

  2. from https://stackoverflow.com/questions/22533399/why-do-i-not-see-changes-issued-through-an-update-query-with-spring-data-jpa by cc-by-sa and MIT license