[SPRING] 1 년 이상 된 레코드 삭제
SPRING1 년 이상 된 레코드 삭제
Spring JPA Repositories를 사용하여 데이터베이스에 트위터를 저장하고 있습니다. 트윗의 날짜는 Datetime으로 MySQL 데이터베이스에 저장됩니다. 이제 1 년이 넘은 모든 트윗을 삭제하고 싶습니다. 함수 CURRENT_TIME이 있고 CURRENT_TIME-360과 같은 것을 보았습니다. 올바른 구문이 아니라는 것을 알고 있지만 어떻게 해야할지 잘 모릅니다. 여기에 내가 가진 것이있다.
@Modifying
@Transactional
@Query("DELETE FROM Tweetpost t WHERE t.createdAt > ")
int removeOlderThan();
수정 된 내용 :
저장소:
@Modifying
@Transactional
@Query("DELETE FROM Tweetpost m WHERE m.createdAt < :date")
int removeOlderThan(@Param("date") java.sql.Date date);
서비스:
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);
}
해결법
-
==============================
1.이를 위해서는 2 단계가 필요합니다. 무엇보다도 매개 변수로 메시지를 삭제할 날짜를 취하는 메서드가 필요하며 @Query 주석을 전혀 필요로하지 않습니다.
이를 위해서는 2 단계가 필요합니다. 무엇보다도 매개 변수로 메시지를 삭제할 날짜를 취하는 메서드가 필요하며 @Query 주석을 전혀 필요로하지 않습니다.
따라서 저장소에 다음과 같은 것이 있어야합니다.
@Modifying public void deleteByCreatedAtBefore(Date expiryDate);
이제 서비스 메소드에서 Date를 계산하고 이것을 다음과 같이 전달할 것입니다.
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); }
-
==============================
2.해결 방법 :
해결 방법 :
저장소:
@Modifying @Transactional @Query("DELETE FROM Tweetpost m WHERE m.createdAt < :date") int removeOlderThan(@Param("date") java.sql.Date date);
서비스:
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); }
-
==============================
3.Java에서 현재 시간 - 1 년을 계산 한 후 다음 쿼리를 사용합니다.
Java에서 현재 시간 - 1 년을 계산 한 후 다음 쿼리를 사용합니다.
DELETE FROM Tweetpost t WHERE t.createdAt < :nowMinusOneYear
-
==============================
4.현재 시간을 원하면
현재 시간을 원하면
System.getCurrentTimeMillis()
이전 날짜에서 시간을 가져 와서 현재 날짜에서 빼면 1 년 기간과 비교하면됩니다. 어쩌면 당신은 윤년에 뭔가를 추가해야 할 것입니다.
from https://stackoverflow.com/questions/35550019/delete-records-from-more-than-1-year-ago by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 부트 1.4.0으로 업그레이드 한 후 AbstractPlatformTransactionManager의 NullPointerException (0) | 2019.05.12 |
---|---|
[SPRING] 스프링 부트 : 응용 프로그램을 종료하는 동안의 예외 (0) | 2019.05.12 |
[SPRING] 허용되는 최대 크기와 관련된 Tomcat으로 파일 업로드하기 (0) | 2019.05.11 |
[SPRING] Spring과 Maven을 사용할 때 코드를 서버에 배포하는 가장 좋은 방법은 무엇입니까? (0) | 2019.05.11 |
[SPRING] 405 POST에 허용되지 않는 메소드 (0) | 2019.05.11 |