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
}