不幸的是JPQL不能使用limit
關鍵詞。但是你可以分兩步做。首先 - 獲取最新ID的有限列表。其次 - 刪除所有推文,這些id不在此列表中。我想,因爲你想刪除最舊的記錄,你有類似date
列。
申報庫兩種方法:
@Repository
public TweetpostRepository extends CrudRepository<Tweetpost , Integer>{
@Query("select t.id from TweetPost t order by t.date desc")
public Page<Integer> findLatestId(Pageable pageable);
@Modifying
@Transactional
@Query("delete from TweetPost t where t.id not in (:idList)")
public void deleteByExcludedId(@Param("idList") List<Integer> idList);
...
}
注意,我們使用desc
排序,因爲我們需要的最新記錄的ID。現在你可以在控制器旁邊的方式來使用它:
@Service
public class MyService {
@Autowired
private TweetpostRepository repository;
public void trunkateTweetposts(){
Page<Integer> page = repository.findLatestId(new PageRequest(0, 10));
repository.deleteByExcludedId(page.getContent());
...
}
}
在這個例子中10
是要保留記錄的計數。
那麼這裏有什麼問題? – Ankit
你將如何定義,哪些行已被刪除?它應該是最古老的行,還是應該是具有最小特定字段值的行? –
只是最古老的樹林。因此,如果我在db中有105條記錄,它應該刪除最老的5條。 – julien