若我的域类中并没有链接字段,那个么我如何在grails中将表和条件连接起来



我在域模型中有两个类:

class Project {
   String name
   Integer fund
}
class Task {
   String name
   Integer weight
   Project project
}

如何使用Task.name="something"获取Project?

如果我需要Project.name="something"的Task,我可以通过createAlias根据条件来完成,但我如何在中加入Task

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的答案之外,我认为您还需要(或应该将其作为最佳实践)正确定义的两个域类之间的关系:

class Project {
   String name
   Integer fund
   static hasMany = [tasks: Task]
}
class Task {
   String name
   Integer weight
   static belongsTo = [project: Project]
}

最新更新