gpt4 book ai didi

grails - 使用 grails criteria api 定义 OR 条件

转载 作者:行者123 更新时间:2023-12-02 06:31:09 25 4
gpt4 key购买 nike

我有以下域对象:

class User {
String name
Transaction transaction

static constraints = {
transaction nullable: true
}
}

class Transaction {
boolean successful
User user
static belongsTo = User
}

我想选择所有没有成功交易的用户。这意味着我希望没有任何交易的用户 (transaction == null) 和具有成功值 false 的交易的用户 (transaction.successful ==假)。我想使用 Criteria API 来执行此操作(因为这可以根据用户输入与其他条件相结合)。

我尝试过这个:

def c = User.createCriteria()
def results = c {
or {
isNull 'transaction'
transaction {
eq 'successful', false
}
}
}

但是,这仅给我提供了进行交易的用户(成功值false)。但我没有得到交易为 null 的用户

以下代码显示了我如何创建一些示例数据:

def createUserAndTransaction(String name, Boolean successful = null) {
User u = new User(name: name)
if (successful != null) {
Transaction t = new Transaction(user: u, successful: successful)
u.setTransaction(t)
}
u.save()
}

def init = { servletContext ->
createUserAndTransaction 'john', true
createUserAndTransaction 'mike', false
createUserAndTransaction 'pablo'
}

在这种情况下,我的条件查询仅返回 mike。但我想要mikepablo。我错过了什么?

最佳答案

所以问题是它默认为内部联接。您必须为表创建别名并定义其连接类型:

createAlias("transaction", "t", CriteriaSpecification.LEFT_JOIN)

or {
isNull("t")
eq("t.successful", false)
}

关于grails - 使用 grails criteria api 定义 OR 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14445374/

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