我正在使用SpringBoot 2.0.4。
这个想法是要检索一个 Conversation 实体,该实体包含 Message 对象的集合。但是我需要控制消息收集的大小,例如仅检索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条)最新消息?
答案 0 :(得分:0)
在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();
答案 1 :(得分:-1)
您可以根据自己的情况尝试使用此代码
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();
希望获得帮助!