提问人:betta7391 提问时间:7/21/2021 最后编辑:betta7391 更新时间:7/26/2021 访问量:182
如何使用 Hibernate Criteria API 通过多对多关系对实体进行排序?
How to order entities by many-to-many relationship using the Hibernate Criteria API?
问:
我需要通过多对多关系对我的实体进行排序。
假设我的域如下:
@Entity
public class Field {
....
@ManyToMany
@JoinTable(name="field_crop", joinColumns={@JoinColumn(name="field_id")}, inverseJoinColumns = {@JoinColumn(name="crop_id")})
@OrderBy(value="name")
private List<Crop> crops;
....
}
@Entity
public class Crop {
....
private String name;
....
}
假设在我的域中,我有以下数据:
- Filed1 { crops: {柠檬} }
- Filed2 { crops: {猕猴桃, 杏子} }
- Filed3 { crops: {杏} }
- Filed4 { crops: {鳄梨, 香蕉} }
使用关系上的注释,我将列表中的元素按其名称排序:@OrberBy
@ManyToMany
Crop
- Filed1 { crops: {柠檬} }
- Filed2 { crops: {杏子、猕猴桃} }
- Filed3 { crops: {杏} }
- Filed4 { crops: {鳄梨, 香蕉} }
提取所有 Field 实体(按 Crop 实体的 name 属性排序)的预期结果为:
Filed3
Field2
Field4
Field1
如何通过 Hibernate Criteria 做到这一点?
答:
0赞
Christian Beikov
7/26/2021
#1
最好在实体类中的事件侦听器中编写一个列表并对其进行排序。Comparator
@PostLoad
评论
0赞
betta7391
7/29/2021
好的,我可以在内存中执行此操作;但是如果我使用分页呢?
0赞
Christian Beikov
7/29/2021
好吧,您不是在对集合进行分页,而是对整体结果进行分页,所以这无关紧要。无论哪种方式,获取集合并对整体结果进行分页都不是那么好用,因为 Hibernate 必须获取整个结果集并执行内存分页。如果你想要高效的分页,我建议你看看 Blaze-Persistence,它可以有效地处理这个问题:persistence.blazebit.com/documentation/1.6/core/manual/en_US/......
上一个:Maven 资源插件排除文件夹
下一个:MySQL:数组包含另一个数组
评论