2016-08-24 25 views
0

Spring Data JPA @Query Annotationを使用して180日以上古いすべてのユーザをUserから取得したいとします。ここにクエリがあります。Spring Data JPA @Queryアノテーションを使用してリポジトリから180日前のユーザを照会する方法@Queryアノテーション

@Query("select user from User user where datediff(?1,user.createdTime)>=180") 
List<User> findByCreatedDateMoreThanSixMonths(Date currentDate); 

以下は、呼び出しコードです。

List<User> userList = userRepository.findByCreatedDateMoreThanSixMonths(new Date()); 

これは方法ですか、何か不足していますか? bczを実行しても期待された結果が得られません。

+0

ここで日付比較をしてはいけませんか? 'user.createdTime'も' Date'オブジェクトであれば、整数 '180'を照会することはできません。 – px06

+0

dateDiff()は日付を比較し、整数を日数で返します。ではない? –

答えて

1

あなたのリポジトリブロでこれを試してみてくださいすることができます - あなたが欲しい1.If

ネイティブMySQLを使用する日付メソッド: -

@Query("select user from User user where datediff(curdate(),user.createdTime)>=180") 
List<User> findByCreatedDateMoreThanSixMonths(); 

2.私はあなた合格日: -

​​

異なるタイプのデータベースを使用している場合でも、同じ設定を見つけることができます。

1

あなたはJPA named queryを使用することができます。

List<User> findByCreatedAtBefore(Date expiryDate); 

public void performLookUp(){ 

    Calendar cal = Calendar.getInstance(); 
    Date today = cal.getTime(); 
    cal.add(Calendar.DAY_OF_MONTH, -180); 
    Date daysAgo180 = cal.getTime(); 

    MyUserRepository.findByCreatedAtBefore(daysAgo180); 
} 

あなたが戻って6ヶ月をチェックしたい場合は、あなたがadd(Calendar.MONTH, -6)

関連する問題