Hibernate 限制级联获取实体的大小/JPA

Hibernate 限制级联获取实体的大小/JPA,hibernate,spring-boot,jackson,spring-data-jpa,Hibernate,Spring Boot,Jackson,Spring Data Jpa,考虑到SpringBoot、MySQL、SpringData/JPA和Jackson的应用程序堆栈 我正在尝试实现一种限制动态获取实体大小的方法。在简化模式中,假设我们有一篇包含多条注释的文章,但是为了快速预览,我只想在文章中获取前10条注释 我会调用SpringData存储库来加载ID为10的帖子,但jackson序列化程序会循环遍历所有评论,并构建一个潜在的巨大输出 我找到的最简单的方法是告诉jackson将该字段@JsonIgnore,然后在服务上获取前10条注释,并将它们附加到标记为tr

考虑到SpringBoot、MySQL、SpringData/JPA和Jackson的应用程序堆栈

我正在尝试实现一种限制动态获取实体大小的方法。在简化模式中,假设我们有一篇包含多条注释的文章,但是为了快速预览,我只想在文章中获取前10条注释

我会调用SpringData存储库来加载ID为10的帖子,但jackson序列化程序会循环遍历所有评论,并构建一个潜在的巨大输出

我找到的最简单的方法是告诉jackson将该字段
@JsonIgnore
,然后在服务上获取前10条注释,并将它们附加到标记为transient的单独字段上的实体

    @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<>();
@JsonView(Views.Detailed.class)
@JsonProperty(“注释”)
@独身癖(
mappedBy=“comment”,
fetch=FetchType.LAZY
)
@订购人(“在描述时创建”)
@限制(10)//这就是我要找的注释类型
列表注释=新建ArrayList();
我知道我可以创建一个Getter来实现返回子列表的逻辑,但是在这种情况下,整个列表都会被获取,对吗

在Jackson方面,我可以尝试使用自定义映射器或注释来限制序列化的深度和长度(这会更好更干净),但我没有找到任何方法来实现它

限制 您只能使用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);

你不能那样做。您当前的单独查询方法正是您所需要的。请尝试使用PagingAndSortingRepositor,或者如果您使用Hibernate,则可以尝试在实体上使用@Filter注释