[英]Spring Data JPA limit nested collection size as Pageable
我正在使用SpringBoot 2.0.4。
這個想法是檢索一個包含Message對象集合的Conversation實體。 但是我需要控制消息收集的大小,例如僅檢索20個最新消息。
@Entity
public class Conversation {
//fields...
@OneToMany(cascade = CascadeType.ALL)
private List<Message> messages = new ArrayList<>();
//methods...
}
和
@Entity
public class Message {
//....
}
因此,當我像這樣通過ID檢索對話時:
conversationRepository.findById(id)
如何僅包含x(例如20條)最新消息?
在MessageRepository
界面中,添加:
@Query("select messages from Conversation c inner join c.messages messages where c = :conversation")
public Page < Message > findByConversation(@Param("conversation") Conversation conversation, Pageable pageable);
要返回最后20條(甚至n條)記錄,請按消息ID降序對它們進行排序:
Pageable pageable = new PageRequest(0, 20, Sort.Direction.DESC, "id");
Page<Message> messages = repo.findByConversation(conversation, pageable);
List<Message> last20MessageList = messages.getContent();
您可以根據情況嘗試使用此代碼
Pageable pageable = new PageRequest(0, 20, Sort.Direction.DESC, "id");
Page<Message> lastPage = conversationRepository.findById(id, pageable);
// this is a list of the last 20 records
List<Message> latestMessage = lastPage .getContent();
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.