Hibernate按关联(可选)字段排序

时间:2012-10-15 16:35:17

标签: java hibernate

我正在尝试对Hibernate数据集进行排序,按(可选)关联对象的属性排序。我按照hibernate order by association中的示例进行了操作 - 这在一定程度上起作用。当没有关联对象时会出现问题,整个记录都会被忽略。

如果我将对象的关联类型更改为外部联接,它会有帮助吗?如果是这样,有人可以指出我正确的指令吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

引用的问题使用了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字段排序。

答案 1 :(得分:1)

我设法只用一行代码更改来解决问题。构造Criteria对象时,我能够传递参数JoinFragment.LEFT_OUTER_JOIN。例如:

    Criteria subCriteria = criteria.createCriteria(subTypeName, JoinFragment.LEFT_OUTER_JOIN);