rod*_*els 23 java performance hibernate jpa hibernate-mapping
如果我使用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<>();
Run Code Online (Sandbox Code Playgroud)
是否可以将加载的集合的大小限制为特定的数字n,或者将页面大小设置为延迟加载集合的前n个元素,而不从该类的其他实例加载所有项目或任何其他项目(例如@BatchSize)?
请注意,问题显式引用POJO映射,而不是使用Criteria或任何其他方式以编程方式限制显式查询中的大小.
我一直在寻找的可能解决方案是在Hibernate中找到SQL TOP语句的实现,希望作为注释或创建自定义CollectionPersister来修改生成的查询(尽管这需要在支持的方言中实现TOP语句).
Vla*_*cea 50
那是不可能的.Hibernate有两种选择:
没有中间立场.那是因为Hibernate需要管理整个集合实体的状态转换.如果你能够加载子集,那么一个单向的包将没有多大意义.
虽然您可以使用@Where或@Filter,但这些注释对于过滤掉集合的内容更有用,而不是限制其大小.
因此,您必须始终记住Hibernate集合是一项功能,而不是强制性要求.查询更灵活,限制更少.
所以,这次你必须使用查询:
您可以通过使用“自定义”联接表名称来限制条目数量,如下所示:
@JoinTable(name = "(select * from the_table order by some_column limit 10)")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9040 次 |
| 最近记录: |