Hibernate Java:如何按entity.fieldA排序

Hibernate Java:如何按entity.fieldA排序,hibernate,sql-order-by,Hibernate,Sql Order By,我在查询数据库并根据entity.fieldA对结果集排序时遇到问题 例如,在学校环境中(学生、教师)。我有一位老师和许多学生 //Student class @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEACHER_ID") private Teacher teacher; 我希望我的查询按teacher.name排序,但我只能使用teacher 因此,有一个问题: FROM Student s ORDER BY s.tea

我在查询数据库并根据entity.fieldA对结果集排序时遇到问题

例如,在学校环境中(学生、教师)。我有一位老师和许多学生

//Student class
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEACHER_ID")
private Teacher teacher;
我希望我的查询按teacher.name排序,但我只能使用teacher

因此,有一个问题:

FROM Student s ORDER BY s.teacher;
即使我在教师身上实施了可比性,它也不起作用:

@Override
public int compareTo(Teacher o) {
  return getName().compareTo(o.getName());
}
我的问题是:

from Student a left join fetch a.teacher where a.xid=:xxx ORDER BY a.teacher ASC
我有一个框架,这就是为什么我不能按a.teacher.name排序,所以我想问,即使使用a.teacher并实现可比较的接口,是否也可以实现按a.teacher.name排序

这个问题来自延迟加载的数据表,当您单击实体列进行排序时,它只会给您实体名称,而不是字段


有什么想法吗?

HQL查询被转换为SQL查询并由数据库执行。而且您的数据库不知道也不关心您的类及其
compareTo()
方法

你只需要

select s from Student s order by s.teacher.name

阅读以了解联接是如何工作的。

我通过动态列和运行时添加sortBy属性解决了这个问题:

<c:if test="#{sort}">
    <c:if test="#{empty childField}">
        <f:attribute name="sortBy" value="#{field}" />
    </c:if>
    <c:if test="#{not empty childField}">
        <f:attribute name="sortBy" value="#{field}.#{childField}" />
    </c:if>
</c:if>


因此,如果未设置childField,代码将按字段排序。否则,如果它是一个像teacher这样的实体,它会将该实体的属性设置为排序字段,在我们的例子中是teacher.name。

你必须将teacher t和student s连接起来,然后按t.nameSorry排序。我想我不清楚,我在我的原始帖子中添加了更多信息。谢谢