Im QueryDSL Repository, kann ich eine benannte Abfrage auf diese Weise machen:Spring Boot: JPA QueryDSL: Wie man ein benanntes Löschen macht?
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
);
Wie kann ich ein
DELETE FROM HISTORICAL_DATA;
ausführen Wenn ich die gleiche Syntax wie oben (mit der @Query
Anmerkung) verwenden , erhalte ich eine Ausnahme:
org.springframework.orm.jpa.JpaSystemException:
could not extract ResultSet; nested exception is
org.hibernate.exception.GenericJDBCException: could not extract ResultSet
Hintergrund: ich will keinen
verwenden,historicalDataRepository.deleteAll();
als dies hat eine sehr geringe Leistung.
EDIT:
Meine Syntax würde wie folgt aussehen:
@Query(value = "DELETE FROM HISTORICAL_DATA", nativeQuery = true)
void myDeleteAll();
gezeigt Wenn Sie Ihr Repository sich von 'JpaRepository' offen sind (die' PagingAndSortingRepository' erstreckt), 'JpaRepository' ein' deleteAllInBatch 'Methode. Falls nicht, fügen Sie den Code für die Methode hinzu, der Sie die angezeigte Abfrage hinzugefügt haben. – manish
Ich habe den Code hinzugefügt. – user2145488
Haben Sie die Methode 'myDeleteAll' mit' @ Modifying' und '@ Transactional' markiert? Lesen Sie [die offizielle Dokumentation] (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries), um die Nuancen der wahrscheinlichsten Anfragen zu verstehen Ändern Sie die zugrunde liegenden Daten. – manish