Mysql 休眠可能为空的按字段排序

Mysql 休眠可能为空的按字段排序,mysql,hibernate,jpa,hql,Mysql,Hibernate,Jpa,Hql,我猜这个问题在某处得到了回答,但我似乎找不到合适的关键词来搜索 我有以下实体: @Entity Entity1{ <random fields> @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "entity_2") Entity2 e2;//might be null. } @Entity Entity2{ <random fields> String name

我猜这个问题在某处得到了回答,但我似乎找不到合适的关键词来搜索

我有以下实体:

@Entity
Entity1{
    <random fields>

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "entity_2")
    Entity2 e2;//might be null.
}

@Entity
Entity2{
    <random fields>
    String name;
}
上述查询(在mysql上测试)的问题在于,它只返回Entity1,其中e2不为null

我需要的是一种获取所有Entity1的方法,即使e2为空

另外,Ive也尝试了这些方法,并取得了相同的结果:

SELECT e1 from Entity1 e1 ORDER BY e1.e2 ASC, e1.e2.name ASC
SELECT e1 from Entity1 e1 ORDER BY e1.e2.name ASC, e1.e2 ASC
提前谢谢
//hql新手

编辑:

添加了jpa-我使用的注释。

如果您使用的是jpa,使用注释对于您的问题来说非常简单。。以这种方式,我给出了一个使用注释的示例

当域对象中有关联对象的集合时,通常需要指定某种默认排序顺序。例如,假设我有域对象时间轴和事件:

@Entity
class Event {

    @Required
    Integer startYear

    Integer endYear

    @Required
    String description

    @ManyToOne
    Timeline timeline
}
此排序顺序与使用带有“startYear,endYear”排序顺序的JPA@OrderBy相同。但是,由于您在Hibernate的@OrderBy中编写了实际的SQL,因此您可以利用数据库的任何功能,但可能会牺牲跨数据库的可移植性。例如,Oracle 10g支持使用类似“按开始年份排序,结束年份为空优先”的语法,在非空结束年份之前排序空结束年份


@org.hibernate.annotations.OrderBy。向域类中添加SQL片段不一定是世界上最优雅的事情,但可能是最实用的事情。

如果我理解正确,您的建议是在Entity1的e2字段中添加@OrderBy(“name”)?不幸的是,我们稍后需要根据其他属性进行排序的通道非常大。。
@Entity
class Event {

    @Required
    Integer startYear

    Integer endYear

    @Required
    String description

    @ManyToOne
    Timeline timeline
}