gpt4 book ai didi

grails - Grails-if和else中具有null属性的createCriteria

转载 作者:行者123 更新时间:2023-12-02 14:23:22 24 4
gpt4 key购买 nike

我正在使用Grails 2.3.4。我正在尝试使用特定条件检索域对象,但是当属性为null时,我很难解决。这是一个例子。

class Domain1 {
int locationId
Domain2 domain2
Domain3 domain3
...
static constraints = {
locationId(nullable:false, blank:false, unique:false)
domain2(nullable:true)
domain3(nullable:true)
...
}
}

class Domain2 {
int locationId
...
static constraints = {
locationId(nullable:false, blank:false, unique:false)
...
}
}

class Domain3 {
int locationId
...
static constraints = {
locationId(nullable:false, blank:false, unique:false)
...
}
}

如果locationId在Domain1中有效,而locationId在Domain2中有效,如果非null,而locationId在Domain3中有效,则仅假设查询返回单个Domain1。
def getDomain1ById(Long sid) {
return Domain1.createCriteria().get {
idEq(sid)
'in' ("locationId", Util.getUserAccessLocationList())
// What I want to do is if(domain2 != null) check location
or {
isNull("domain2")
domain2 {
'in' ("locationId", Util.getUserAccessLocationList())
}
}
// What I want to do is if(domain3 != null) check location
or {
isNull("domain3")
domain3 {
'in' ("locationId", Util.getUserAccessLocationList())
}
}
}
}

我想念什么。如果domain2和domain3不为空,则查询工作正常

最佳答案

默认情况下,Grails条件查询使用内部联接。为了实现您想要的条件行为,请更改为左联接:

Domain1.createCriteria().get {
createAlias('domain2', 'd2', CriteriaSpecification.LEFT_JOIN)
createAlias('domain3', 'd3', CriteriaSpecification.LEFT_JOIN)
idEq(sid)
'in' ("locationId", locIds)
or {
isNull("domain2")
'in' ("d2.locationId", locIds)
}
or {
isNull("domain3")
'in' ("d3.locationId", locIds)
}
}

关于grails - Grails-if和else中具有null属性的createCriteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com