Używam 3.1 i wiosna Wiosna WZP danych. Miałem podobny problem. Podczas próby aktualizacji wielu rekordów w jednym zapytaniu ciągle pojawiał się błąd.
Tak, miałem coś takiego.
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);
Błąd:
org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations
Tak, po googlowania na chwilę, I okazało się, że trzeba było dodać @Modifying.
@Modifying
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);
Ale potem był otrzymuję następujący błąd:
...
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query;
nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
...
Więc pomyślałem, mój problem był już problem transakcji i poszedłem z powrotem do Google, aby go badania i okazało się, że trzeba dodaj @Transactional teraz. Wygląda na to, że @Modifying wymaga również @Transactional.
@Modifying
@Transactional
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);
ale potem mam następujący błąd:
No value for key [org.apache.commons.dbcp.BasicDataSource (...) ] bound to thread
Znowu googled na chwilę i doszedł do wniosku, że moja konfiguracja była źle i to okazało się prawdą. Brakowało niektórych konfiguracji xml.
<beans:bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<beans:property name="entityManagerFactory" ref="entityManagerFactory"/>
</beans:bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
To była długa podróż, ale w końcu udało mi się. Mam nadzieję, że to pomoże komuś, starając się "zapłacić dalej", jak wielu innych pomogło mi w ich wspaniałych blogach, odpowiedziach i komentarzach.
również upewnij się, że adnotacja jest importowana z org.springframework.transaction.annotation nie javax – barryku
Używam dokładnie tej samej konfiguracji z następującą klasą z repozytorium Spring JPA, ale otrzymuję błąd podczas tworzenia komponentu bean. (Nie jest to konkretny błąd, po prostu mówi, że nie można utworzyć repozytorium). Dlaczego miałoby to być? '@Repository interfejs IContactRepository rozciąga PagingAndSortingRepository { \t @Modifying \t @query ("DELETE FROM kontakt C = gdzie c.circle.id: circleId") \t void deleteAllMembersOf (@param ("circleId") Long circleId); } ' –
noego