考虑将应用程序的堆栈与SpringBoot,MySQL,SpringData / JPA和Jackson结合使用。
我正在尝试找到一种方法来限制动态获取的实体的大小。在简化模式中,假设我们有一个包含多个评论的帖子,但是为了快速预览,我只想与该帖子一起获取前10条评论。
我将调用SpringData存储库以加载ID为10的帖子,但杰克逊序列化程序将循环所有注释并生成潜在的巨大输出。
我找到的最简单的方法是告诉杰克逊到@JsonIgnore
字段,然后在服务上获取前10条注释,并将它们附加到标记为“瞬态”的单独字段上的实体。
@JsonView(Views.Detailed.class)
@JsonProperty("comments")
@OneToMany(
mappedBy = "comment",
fetch = FetchType.LAZY
)
@OrderBy("created_at DESC")
@Limit(10) // This is the kind of annotation I'm looking for
List<Comment> comments = new ArrayList<>();
我知道我可以创建一个Getter来实现返回子列表的逻辑,但是在这种情况下,整个列表都会被提取,对吗?
从Jackson的角度来看,我可以尝试使用自定义的映射器或注释来限制序列化的深度和长度(这会更好更清洁),但是我没有找到任何方法来实现。
答案 0 :(得分:0)
限制 您可以使用limit来仅获取10条记录
@Query(value="select * from user limit 10",nativeQuery=true)
可分页
findById(@Param("userId") String userId, Pageable pageable);
Pageable topTen = new PageRequest(0, 10);
findById(userId , topTen);