在 createcritera.list 中排序空值
To order null values in createcritera.list
我在对使用 createCriteria 创建的列表进行排序时遇到问题。
问题是当我根据一些 a 属性 排序时它的值为 null ,然后整个对象被排除在列表之外。
(sort参数通过sorttable column传递)
这是我的代码示例。
SomeClass.createCriteria().list {
eq('sth', sth)
if (sort == 'someValue') {
nestedClass1 {
nestedClass2 {
nestedClass3 {
order('name', sortOrder)
} } }
}}
问题是例如当 nestedCalss1 为空时整个对象从列表中删除
像这样的关联查询默认情况下是内连接,要包含空值,您需要使用左外连接,您可以使用 createAlias
import org.hibernate.criterion.CriteriaSpecification
SomeClass.createCriteria().list {
eq('sth', sth)
if (sort == 'someValue') {
createAlias("nestedClass1", "nc1", CriteriaSpecification.LEFT_JOIN)
createAlias("nc1.nestedClass2", "nc2", CriteriaSpecification.LEFT_JOIN)
createAlias("nc2.nestedClass3", "nc3", CriteriaSpecification.LEFT_JOIN)
order("nc3.name", sortOrder)
}
}
以下是如何使空值按列表的顺序排在最后:
def c = SomeClass.createCriteria()
List instanceList = c.list {
eq('sth', sth)
if (sort == 'someValue') {
createAlias("nestedClass1", "nc1", CriteriaSpecification.LEFT_JOIN)
createAlias("nc1.nestedClass2", "nc2", CriteriaSpecification.LEFT_JOIN)
createAlias("nc2.nestedClass3", "nc3", CriteriaSpecification.LEFT_JOIN)
if(params.order == "asc")
c.addOrder(Order.asc("nc3.name").nulls(org.hibernate.NullPrecedence.LAST))
else
c.addOrder(Order.desc("nc3.name").nulls(org.hibernate.NullPrecedence.LAST))
}
}
我在对使用 createCriteria 创建的列表进行排序时遇到问题。 问题是当我根据一些 a 属性 排序时它的值为 null ,然后整个对象被排除在列表之外。 (sort参数通过sorttable column传递)
这是我的代码示例。
SomeClass.createCriteria().list {
eq('sth', sth)
if (sort == 'someValue') {
nestedClass1 {
nestedClass2 {
nestedClass3 {
order('name', sortOrder)
} } }
}}
问题是例如当 nestedCalss1 为空时整个对象从列表中删除
像这样的关联查询默认情况下是内连接,要包含空值,您需要使用左外连接,您可以使用 createAlias
import org.hibernate.criterion.CriteriaSpecification
SomeClass.createCriteria().list {
eq('sth', sth)
if (sort == 'someValue') {
createAlias("nestedClass1", "nc1", CriteriaSpecification.LEFT_JOIN)
createAlias("nc1.nestedClass2", "nc2", CriteriaSpecification.LEFT_JOIN)
createAlias("nc2.nestedClass3", "nc3", CriteriaSpecification.LEFT_JOIN)
order("nc3.name", sortOrder)
}
}
以下是如何使空值按列表的顺序排在最后:
def c = SomeClass.createCriteria()
List instanceList = c.list {
eq('sth', sth)
if (sort == 'someValue') {
createAlias("nestedClass1", "nc1", CriteriaSpecification.LEFT_JOIN)
createAlias("nc1.nestedClass2", "nc2", CriteriaSpecification.LEFT_JOIN)
createAlias("nc2.nestedClass3", "nc3", CriteriaSpecification.LEFT_JOIN)
if(params.order == "asc")
c.addOrder(Order.asc("nc3.name").nulls(org.hibernate.NullPrecedence.LAST))
else
c.addOrder(Order.desc("nc3.name").nulls(org.hibernate.NullPrecedence.LAST))
}
}