我的猜测是这个问题在某个地方得到了解答,但我似乎找不到合适的关键词来搜索。
我有这些实体:
@Entity
Entity1{
<random fields>
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "entity_2")
Entity2 e2;//might be null.
}
@Entity
Entity2{
<random fields>
String name;
}
我想写一个查询,返回我们的Entity2的名称所有的Entity1。我试过这个:
SELECT e1 from Entity1 e1 ORDER BY e1.e2.name ASC
上述查询(在mysql上测试)的问题是它只返回Entity1,其中e2不为null。
我需要的是一种获取所有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 newbie
编辑:
添加了我使用的jpa -annotations。
答案 0 :(得分:0)
如果你正在使用JPA,使用Annotations对你的问题来说非常简单..就这样我给出一个使用Annotaion的例子
如果域对象中有关联对象的集合,通常需要指定某种默认排序顺序。例如,假设我有域对象时间轴和事件:
@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”之类的语法来命令非结束年份之前的null结束年份。
@ org.hibernate.annotations.OrderBy。在您的域类中添加SQL片段不一定是世界上最优雅的东西,但它可能是最实用的东西。