级联提取实体Jackson / JPA的限制大小

时间:2019-02-26 08:47:30

标签: hibernate spring-boot jackson spring-data-jpa

考虑将应用程序的堆栈与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的角度来看,我可以尝试使用自定义的映射器或注释来限制序列化的深度和长度(这会更好更清洁),但是我没有找到任何方法来实现。

1 个答案:

答案 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);

Jpa Doc