我正在尝试对 Hibernate 数据集进行排序,按(可选)关联对象的属性进行排序。我按照关联的休眠顺序的示例进行了操作-这在一定程度上有效。当没有关联对象时,问题就来了,整个记录都被忽略了。
如果我将对象的关联类型更改为外部联接,它会有所帮助吗?如果是这样,有人可以指点我正确的指令吗?
非常感谢。
引用的问题使用了 Criteria 查询,因此我不确定您是否需要这些问题的答案,或者您是否只需要 HQL。假设 HQL 没问题,如果您有这样的实体:
class EntityA {
private Long id;
@OneToMany
private EntityB b;
....
}
class EntityB {
private Long id;
private String name;
}
如果您在 EntityA 和 EntityB 之间有一个可选的 OneToMany 关系,那么您应该能够使用类似以下的查询:
"SELECT obj FROM " + EntityA.class.getName() + " obj LEFT JOIN obj.b obj2 ORDER BY obj2.name";
您将在其中选择所有EntityA
与EntityB
它存在的地方连接的地方,按EntityB.name
字段排序。
我只用一行代码更改就解决了这个问题。在构造 Criteria 对象时,我能够传递参数 JoinFragment.LEFT_OUTER_JOIN。例如:
Criteria subCriteria = criteria.createCriteria(subTypeName, JoinFragment.LEFT_OUTER_JOIN);