2017-01-16 17 views
0

は、私がこのように名前付きクエリを行うことができます。Springブート:JPA QueryDSL:名前付き削除を行う方法? QueryDSLリポジトリで

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 
); 

を私は(@Query注釈付き)上記と同じ構文を使用している場合、私は

DELETE FROM HISTORICAL_DATA; 

を実行するにはどうすればよいです

org.springframework.orm.jpa.JpaSystemException: 
could not extract ResultSet; nested exception is 
org.hibernate.exception.GenericJDBCException: could not extract ResultSet 

背景:私は

を使用したくない、私は例外を取得します
historicalDataRepository.deleteAll(); 

これはパフォーマンスが非常に低いためです。

EDIT:

私の構文は次のようになります。あなたはJPAクエリだけでなく、ネイティブクエリの両方を組み合わせている、のような

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

以下のようにネイティブとしてそれを指定する必要があります'メソッド。そうでない場合は、表示されたクエリを追加したメソッドのコードを追加してください。 – manish

+0

コードを追加しました。 – user2145488

+0

'@ Modifying'と' @ Transactional'を使って 'myDeleteAll'メソッドをマークしましたか?可能性が高いクエリに関するニュアンスを理解するには、[公式ドキュメント](https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries)を必ずお読みください基になるデータを変更します。 – manish

答えて

0

が見えます。あなたが与えている構文については、あなたが( `PagingAndSortingRepository`を拡張)` JpaRepository`からリポジトリを拡張するに開いている場合、 `JpaRepository`は` deleteAllInBatchを提供し、

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

これは、質問に書かれているようにランタイムエラーにつながります。 – user2145488

関連する問題