Spring 데이터 JPA 업데이트 @Query가 데이터를 업데이트하지 않음
업데이트 쿼리가 정의되어 있음에도 불구하고:
<code class="java">@Modifying @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(...);</code>
그리고 통합 테스트에서 이를 사용하려고 하면
<code class="java">adminRepository.update("Toto", "LeHeros", admin0.getLogin(), admin0.getSuperAdmin(), admin0.getPreferenceAdmin(), admin0.getAddress(), admin0.getZipCode(), admin0.getCity(), admin0.getCountry(), admin0.getEmail(), admin0.getProfile(), admin0.getPostLoginUrl(), admin0.getId()); Admin loadedAdmin = adminRepository.findOne(admin0.getId()); assertEquals("Toto", loadedAdmin.getFirstname()); // Assertion failed assertEquals("LeHeros", loadedAdmin.getLastname()); // Assertion failed</code>
데이터베이스의 필드가 초기 값으로 유지되어 테스트가 실패하게 됩니다. findOne 쿼리 전에 플러시를 추가해도
<code class="java">adminRepository.flush();</code>
문제가 해결되지 않습니다.
로그에서 업데이트 문을 볼 수 있는데, 이는 Spring Data가 올바르게 쿼리하십시오. 그러나 후속 findOne 쿼리의 결과는 업데이트로 인한 변경 사항과 일치하지 않습니다.
이 동작의 가능한 이유 중 하나는 EntityManager가 기본적으로 변경 사항을 자동으로 플러시하지 않기 때문입니다. 이 문제를 해결하기 위해 @Modifying 주석에clearAutomatically 옵션을 추가할 수 있습니다.
<code class="java">@Modifying(clearAutomatically = true) @Query("UPDATE Admin SET ...") public void update(...);</code>
이렇게 하면 EntityManager가 업데이트 쿼리를 실행한 후 보류 중인 모든 변경 사항을 자동으로 플러시하여 변경 사항이 지속되고 반영되도록 해야 합니다. 후속 쿼리에서
위 내용은 내 Spring 데이터 JPA @Query 업데이트가 데이터를 업데이트하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!