Grails 在createcritera.list中排序空值
对使用createCriteria创建的列表进行排序时出现问题。 问题是,当我根据某个属性(其值为null)进行排序时,整个对象将从列表中排除。 (排序参数通过sorttable列传递) 这是我的代码示例Grails 在createcritera.list中排序空值,grails,gorm,Grails,Gorm,对使用createCriteria创建的列表进行排序时出现问题。 问题是,当我根据某个属性(其值为null)进行排序时,整个对象将从列表中排除。 (排序参数通过sorttable列传递) 这是我的代码示例 SomeClass.createCriteria().list { eq('sth', sth) if (sort == 'someValue') { nestedClass1 { nestedClass2 {
SomeClass.createCriteria().list {
eq('sth', sth)
if (sort == 'someValue') {
nestedClass1 {
nestedClass2 {
nestedClass3 {
order('name', sortOrder)
} } }
}}
例如,当nestedCalss1为null时,整个对象将从列表中删除,默认情况下,这类关联查询是内部联接,以包括需要使用左外部联接的null,这可以通过
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)
}
}
默认情况下,这样的关联查询是内部联接,要包含空值,您需要使用左外部联接,您可以使用
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)
}
}
默认情况下,这样的关联查询是内部联接,要包含空值,您需要使用左外部联接,您可以使用
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)
}
}
默认情况下,这样的关联查询是内部联接,要包含空值,您需要使用左外部联接,您可以使用
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))
}
}
以下是如何使空值按列表的顺序持续:
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))
}
}
以下是如何使空值按列表的顺序持续:
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))
}
}
以下是如何使空值按列表的顺序持续:
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))
}
}
它非常有效!但是我如何才能使空值按列表的顺序保持在最后,因为它们现在显示在列表的顶部?它非常有效!但是我如何才能使空值按列表的顺序保持在最后,因为它们现在显示在列表的顶部?它非常有效!但是我如何才能使空值按列表的顺序保持在最后,因为它们现在显示在列表的顶部?它非常有效!但是,我如何才能使空值按列表的顺序保持在最后,因为它们现在显示在列表的顶部?