Home  >  Article  >  Java  >  Why is My Spring Data JPA @Query Update Not Updating Data?

Why is My Spring Data JPA @Query Update Not Updating Data?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 17:42:02373browse

Why is My Spring Data JPA @Query Update Not Updating Data?

Spring Data JPA Update @Query Not Updating Data

Despite having an update query defined:

<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>

and trying to use it in an integration test:

<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>

the fields in the database remain their initial values, causing the test to fail. Even adding a flush before the findOne query:

<code class="java">adminRepository.flush();</code>

doesn't resolve the issue.

The update statement can be observed in the logs, indicating that Spring Data is generating and executing the query correctly. However, the results of the subsequent findOne query are not consistent with the changes made by the update.

One possible reason for this behavior is that the EntityManager does not flush changes automatically by default. To address this, the clearAutomatically option can be added to the @Modifying annotation:

<code class="java">@Modifying(clearAutomatically = true)
@Query("UPDATE Admin SET ...")
public void update(...);</code>

This should cause the EntityManager to automatically flush all pending changes after executing the update query, ensuring that the changes are persisted and reflected in subsequent queries.

The above is the detailed content of Why is My Spring Data JPA @Query Update Not Updating Data?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn