Delete records from more than 1 year ago

前端 未结 4 650
说谎
说谎 2021-01-18 02:26

I\'m saving twitter tweets in my database with spring JPA Repositories. The date of the tweet is saved as Datetime in the MySQL db. Now I want to delete all tweets that are

相关标签:
4条回答
  • 2021-01-18 02:41

    If you want the current time you could use

    System.getCurrentTimeMillis()
    

    Take the time from the old date and subtract it from the current one then you just have to compare it with the duration of one year. Maybe you should add something for leap-years.

    0 讨论(0)
  • 2021-01-18 02:55

    SOLVED:

    Repository:

    @Modifying
        @Transactional
        @Query("DELETE FROM Tweetpost m WHERE m.createdAt < :date")
        int removeOlderThan(@Param("date") java.sql.Date date);
    

    Service:

    public void removeOldItems() {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DATE, -360);
    
            java.sql.Date oneYear = new java.sql.Date(cal.getTimeInMillis());
    
            tweetRepository.removeOlderThan(oneYear);
    
    
        }
    
    0 讨论(0)
  • 2021-01-18 02:58

    For this you need 2 steps. First of all you need a method that will take as a parameter the date of which you want to delete the messages and you dont need tha @Query annotation at all.

    So in your repository you must have something like

        @Modifying
        public void deleteByCreatedAtBefore(Date expiryDate);
    

    Now in your service method, you will calculate the Date and pass it on like this

        public void performTweetCleanup(){
           //calculate date
           Calendar cal = Calendar.getInstance();
           Date today = cal.getTime();
           cal.add(Calendar.YEAR, -1);
           Date previousYear = cal.getTime();
    
           //call the method
           MyTweeterRepository.deleteByCreatedAtBefore(previousYear);
         }
    
    0 讨论(0)
  • 2021-01-18 02:59

    Compute the current time minus one year in Java, and then use the follwoing query:

    DELETE FROM Tweetpost t WHERE t.createdAt < :nowMinusOneYear
    
    0 讨论(0)
提交回复
热议问题