2

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

我有这些实体:

@Entity
Entity1{
    <random fields>

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

@Entity
Entity2{
    <random fields>
    String name;
}

我想编写一个查询,返回我所有的 Entity1 按其 Entity2 的名称排序的。我试过这个:

SELECT e1 from Entity1 e1 ORDER BY e1.e2.name ASC

上述查询的问题(在 mysql 上测试)是它只返回 e2 不为空的实体 1。

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

附言。我也试过这些,结果相同:

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 -annotations。

4

1 回答 1

0

如果您正在使用 JPA,则使用 Annotations 对您的问题来说非常简单.. 这样我就举了一个使用 Annotaion 的例子

当您在域对象中有关联对象的集合时,您通常希望指定某种默认排序顺序。例如,假设我有域对象 Timeline 和 Event:

@Entity
class Event {

    @Required
    Integer startYear

    Integer endYear

    @Required
    String description

    @ManyToOne
    Timeline timeline
}

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

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

于 2012-12-21T10:57:58.677 回答