>  기사  >  Java  >  Spring Data JPA에서 내 업데이트 문이 플러시되지 않는 이유는 무엇입니까?

Spring Data JPA에서 내 업데이트 문이 플러시되지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-26 13:54:30601검색

Why Are My Update Statements Not Flushing in Spring Data JPA?

업데이트 문이 플러시되지 않나요?

Spring Data JPA의 @Query 주석을 사용하면 사용자 지정 쿼리를 실행할 수 있습니다. 제공된 코드 조각에서 @Modifying 쿼리는 관리 엔터티를 업데이트하는 데 사용됩니다. 그러나 이 쿼리를 통해 변경된 사항은 데이터베이스에 유지되지 않습니다.

플러싱의 역할

기본적으로 EntityManager는 변경 사항을 자동으로 플러시하지 않습니다. 즉, @Modifying 쿼리를 통해 이루어진 변경 사항은 EntityManager의 로컬 캐시에만 반영되지만 EntityManager가 명시적으로 플러시될 때까지는 데이터베이스에 유지되지 않습니다.

해결책: 강제 플러시

@Modifying 쿼리를 통해 변경된 내용이 데이터베이스에 유지되도록 하려면 @Modifying 주석에clearAutomatically = true 옵션을 추가하세요. 이렇게 하면 EntityManager가 각 쓰기 작업 후에 변경 사항을 자동으로 플러시하여 데이터베이스가 즉시 업데이트되도록 합니다.

수정된 쿼리:

<code class="java">@Modifying(clearAutomatically = true)
@Transactional
@Query("UPDATE Admin SET firstname = :firstname, lastname = :lastname, login = :login, superAdmin = :superAdmin, preferenceAdmin = :preferenceAdmin, address =  :address, zipCode = :zipCode, city = :city, country = :country, email = :email, profile = :profile, postLoginUrl = :postLoginUrl WHERE id = :id")
public void update(@Param("firstname") String firstname, @Param("lastname") String lastname, @Param("login") String login, @Param("superAdmin") boolean superAdmin, @Param("preferenceAdmin") boolean preferenceAdmin, @Param("address") String address, @Param("zipCode") String zipCode, @Param("city") String city, @Param("country") String country, @Param("email") String email, @Param("profile") String profile, @Param("postLoginUrl") String postLoginUrl, @Param("id") Long id);</code>

추가 고려 사항:

  • 트랜잭션 관리 사용: 트랜잭션은 데이터베이스에 대한 변경 사항이 원자적이고 일관성이 있는지 확인합니다. @Modifying 쿼리에 대한 호출을 트랜잭션으로 묶어 업데이트가 성공적으로 유지되도록 합니다.
  • Flush 메서드 사용: AndFlush 메서드를 사용하여 데이터베이스에 대한 변경 사항을 명시적으로 플러시할 수도 있습니다. 이 방법은 데이터베이스를 수정하는 쿼리를 실행한 후에 사용할 수 있습니다.

위 내용은 Spring Data JPA에서 내 업데이트 문이 플러시되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.