我有以下域对象:
class User {
String name
Transaction transaction
static constraints = {
transaction nullable: true
}
}
class Transaction {
boolean successful
User user
static belongsTo = User
}
我想选择所有users
没有成功交易的人。这意味着我想要没有任何交易的用户 ( transaction == null
) 和具有成功价值false
( transaction.successful == false
) 的交易的用户。我想用 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
在这种情况下返回。但我想要mike
和pablo
。我错过了什么?