2017-01-16 3 views
0

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(); 
+0

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

+0

Ich habe den Code hinzugefügt. – user2145488

+0

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

Antwort

0

Sieht aus wie, Sie sind beide JPA Query sowie native Abfrage kombinieren. Für die Syntax, die Sie gegeben haben, müssen Sie es als native angeben, wie unten

@Query(value = "DELETE FROM HISTORICAL_DATA", nativeQuery = true) 
+0

dies führt zu einem Laufzeitfehler wie in der Frage geschrieben. – user2145488

Verwandte Themen