如果我的域 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]
}