【问题标题】:How to limit the number of results in a list within a relationship in spring-data如何限制spring-data关系中列表中的结果数量
【发布时间】:2016-02-23 14:11:08
【问题描述】:

我正在研究 Spring Data,我有一个关于查询的问题。

我在两个实体之间有关系:

@Entity
public class A {
   //other fields
   List<B> counter;
   //getters and setters
}

@Entity
public class B {
  //other fields
  Long count;
  //getters and setters
}

现在,在我的 A 类存储库中,我想获取 A 的所有对象。对于这些对象中的每一个,我只想从 B 类中获取前五个对象,按字段“count” asc 或描述。

我该怎么做?我发现的“前 5 个元素”或“前 5 个元素”的示例仅对实体 A 的元素有用,而对 B 没有。

任何帮助将不胜感激。提前致谢!

更新 也许也可以使用命名查询。如果有人知道如何遵循这种方式并且可以提供帮助,我将不胜感激。谢谢。

【问题讨论】:

    标签: hibernate jpa spring-boot spring-data named-query


    【解决方案1】:

    我没有测试这个。我希望这对你有用。 @BatchSize 可用于定义批量加载集合或惰性实体的大小。

    @Entity
    public class A {
       //other fields
       @Fetch(FetchMode.SELECT)
       @BatchSize(size = 10)
       List<B> counter;
       //getters and setters
    }
    
    @Entity
    public class B {
      //other fields
      Long count;
      //getters and setters
    }
    

    获取策略

    有四种获取策略

    1. fetch-“join” = 禁用延迟加载,始终加载所有集合和实体。
    2. fetch-“select”(默认)= 延迟加载所有集合和实体。
    3. batch-size=”N” = 最多获取“N”个集合或实体,不记录
    4. fetch-“subselect” = 将其集合分组到 sub select 语句中。

    batch-size=”10” 或 @BatchSize(size = 10) 批量大小的获取策略没有定义加载集合中的记录数。相反,它定义了应该加载多少个集合。

    请找到链接:http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/

    【讨论】:

    • 不幸的是它没有用。我认为它应该在 A 类的存储库中完成,你知道吗?而不是使用 findAll() 方法,也许有一些方法可以过滤我想要该特定列表的多少结果。但无论如何,感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2018-01-01
    • 1970-01-01
    • 2020-01-18
    • 2021-11-13
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多