Home > Java > javaTutorial > body text

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

Susan Sarandon
Release: 2024-10-25 17:42:02
Original
373 people have browsed it

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>
Copy after login

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>
Copy after login

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>
Copy after login

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>
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!