gpt4 book ai didi

java - 是否可以使用 Hibernate 或 JPA 注释来限制 @OneToMany 集合的大小?

转载 作者:IT老高 更新时间:2023-10-28 20:50:05 24 4
gpt4 key购买 nike

如果我在使用 JPA/Hibernate Annotations 的 POJO 中有以下映射集合:

@OneToMany(mappedBy = "columnName", fetch = FetchType.LAZY)
@OrderBy("aField")
@MapKeyJoinColumn(name = "id_fk")
@LazyCollection(value = LazyCollectionOption.EXTRA)
private Set<PojoClass> collection = new HashSet<>();

是否可以将加载集合的大小限制为特定数字 n 或将页面大小设置为延迟加载集合的前 n 个元素,而不加载所有项目或来自该类的其他实例的任何其他项目(比如@BatchSize)?

请注意,该问题明确提到 POJO 映射,而不是进行额外查询,使用 Criteria 或任何其他方式以编程方式限制显式查询的大小。

我一直在寻找的可能解决方案是在 Hibernate 中找到 SQL TOP 语句的实现,希望作为注释或创建自定义 CollectionPersister 来修改生成的查询(尽管这需要在支持的方言)。

最佳答案

这是不可能的。 Hibernate 有两种选择:

  • 在获取父实体时加载子集合
  • 您在首次访问时延迟加载子集合

没有中间立场。那是因为 Hibernate 需要管理整个集合实体的状态转换。如果您能够加载子集,那么单向袋将没有多大意义。

虽然您可以使用 @Where@Filter,但这些注释对于过滤出集合的内容更有用,而不是限制其大小。

因此,您必须始终记住 [Hibernate 集合是一项功能,not a mandatory requirement .查询更加灵活,限制更少。

所以,这次你必须使用查询:

  • HQL/JPQL
  • 标准
  • native SQL

关于java - 是否可以使用 Hibernate 或 JPA 注释来限制 @OneToMany 集合的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26328187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com