Dans le référentiel QueryDSL, je peux faire une requête nommée ainsi:Spring Boot: JPA QueryDSL: Comment effectuer une suppression nommée?
public interface HistoricalDataRepository
extends PagingAndSortingRepository<HistoricalData, Long>,
QueryDslPredicateExecutor<HistoricalData> {
List<HistoricalData> findAll(Predicate predicate);
HistoricalData findByKeyAndDate(String key, String date);
@Query(value = "SELECT * FROM historical_data h WHERE "
+ " h.key = :key "
+ " AND h.date <= :date "
+ " order by date desc"
+ " limit 1"
, nativeQuery = true)
HistoricalData myFindByKeyLowerOrEqualToDate(
@Param("key") String key
, @Param("date") Date date
);
Comment puis-je effectuer une
DELETE FROM HISTORICAL_DATA;
Si j'utilise la même syntaxe que ci-dessus (avec l'annotation @Query
) , je reçois une exception:
org.springframework.orm.jpa.JpaSystemException:
could not extract ResultSet; nested exception is
org.hibernate.exception.GenericJDBCException: could not extract ResultSet
Contexte: Je ne veux pas utiliser un
historicalDataRepository.deleteAll();
car cela a une très faible performance.
EDIT:
Ma syntaxe ressemblerait à ce qui suit:
@Query(value = "DELETE FROM HISTORICAL_DATA", nativeQuery = true)
void myDeleteAll();
Si vous êtes ouvert à l'extension de votre dépôt de 'JpaRepository' (qui étend' PagingAndSortingRepository'), '' JpaRepository' fournit un deleteAllInBatch 'méthode. Si ce n'est pas le cas, ajoutez le code de la méthode à laquelle vous avez ajouté la requête affichée. – manish
J'ai ajouté le code. – user2145488
Avez-vous marqué la méthode 'myDeleteAll' avec' @ Modifying' et '@ Transactional'? Assurez-vous de lire [la documentation officielle] (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries) pour comprendre les nuances autour des requêtes susceptibles de modifier les données sous-jacentes. – manish