sto usando Primavera 3.1 e Spring JPA dati. Stavo avendo un problema simile. Ho riscontrato costantemente un errore durante il tentativo di aggiornare più record in 1 query.
Quindi, ho avuto qualcosa di simile.
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);
Errore:
org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations
Così, dopo googling per un po ', ho scoperto che si doveva aggiungere @Modifying.
@Modifying
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);
Ma poi mi è stato sempre il seguente errore:
...
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query;
nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
...
Così, ho pensato che il mio problema era ormai un problema di transazione e sono tornato a google per la ricerca e scoperto che si deve aggiungi @Transactional adesso. Sembra che @Modifying richieda anche @Transactional.
@Modifying
@Transactional
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);
ma poi ho ottenuto il seguente errore:
No value for key [org.apache.commons.dbcp.BasicDataSource (...) ] bound to thread
Ancora una volta ho cercato su google per un po 'ed è giunto alla conclusione che la mia configurazione era sbagliato e si è rivelato essere vero. Mi mancavano alcuni configs 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"/>
E 'stato un lungo viaggio ma alla fine ho funzionato. Spero che questo possa aiutare qualcuno, cercando di "ripagarlo" come molti altri mi hanno aiutato con i loro meravigliosi blog, risposte e commenti.
assicurati inoltre che l'annotazione sia importata da org.springframework.transaction.annotation non javax – barryku
Sto utilizzando la stessa configurazione con la seguente classe con il repository JPA di Spring, ma ricevo un errore durante la creazione di bean. (Non è un errore specifico, dice solo che il repository non può essere creato). Perché dovrebbe essere? '@Repository interfaccia IContactRepository estende PagingAndSortingRepository { \t @Modifying \t @query ("cancellare dal contatto c dove c.circle.id =: circleId") \t vuoto deleteAllMembersOf (@param ("circleId") Long circleId); } ' –
noego