如果我的域 class 中没有 link 字段,我如何在 grails 中使用标准加入 table
How can I join table with criteria in grails, if i have not link fields in my domain class
我在域模型中有两个 类:
class Project {
String name
Integer fund
}
class Task {
String name
Integer weight
Project project
}
如何使用 Task.name = "something" 获取项目?
如果我需要 Project.name = "something" 的任务,我可以通过 createAlias 的条件来完成它,但是我如何在
中加入任务
c = Project.createCriteria()
criteriaRes = c.list {
}
我不确定这是否有帮助,但我已经使用 SQL 进行了很多工作,所以当我不知道如何创建条件或在哪里查询时,我首先在HQL,因为它类似于 SQL。如果您不打算使用 NoSQL 数据库,HQL 是一个不错的选择,但是条件和查询在 GORM 实现中是可移植的。
因此,执行您想要的操作的 HQL 查询是
def projects = Task.executeQuery(
'select t.project from Task t where t.name=:taskName',
[taskName: 'something'])
一个类似的条件查询将是
def projects = Task.createCriteria().list {
eq 'name', 'something'
projections {
property 'project'
}
}
除了 Burt 的回答,我认为您需要(或作为最佳实践应该具有)正确定义 2 个域 类 之间的关系:
class Project {
String name
Integer fund
static hasMany = [tasks: Task]
}
class Task {
String name
Integer weight
static belongsTo = [project: Project]
}
我在域模型中有两个 类:
class Project {
String name
Integer fund
}
class Task {
String name
Integer weight
Project project
}
如何使用 Task.name = "something" 获取项目?
如果我需要 Project.name = "something" 的任务,我可以通过 createAlias 的条件来完成它,但是我如何在
中加入任务c = Project.createCriteria()
criteriaRes = c.list {
}
我不确定这是否有帮助,但我已经使用 SQL 进行了很多工作,所以当我不知道如何创建条件或在哪里查询时,我首先在HQL,因为它类似于 SQL。如果您不打算使用 NoSQL 数据库,HQL 是一个不错的选择,但是条件和查询在 GORM 实现中是可移植的。
因此,执行您想要的操作的 HQL 查询是
def projects = Task.executeQuery(
'select t.project from Task t where t.name=:taskName',
[taskName: 'something'])
一个类似的条件查询将是
def projects = Task.createCriteria().list {
eq 'name', 'something'
projections {
property 'project'
}
}
除了 Burt 的回答,我认为您需要(或作为最佳实践应该具有)正确定义 2 个域 类 之间的关系:
class Project {
String name
Integer fund
static hasMany = [tasks: Task]
}
class Task {
String name
Integer weight
static belongsTo = [project: Project]
}