如何在 Grails 中查询多对多关系?

How to query on a many to many relationship in Grails?

我有以下域 类:

class PreparedToWork {

    String location        
    static hasMany = [assessors: Assessor]        
}

class Assessor {

    //Some Properties

    static belongsTo = [PreparedToWork]     
    static hasMany = [preparedToWork: PreparedToWork]
}

我想检索所有准备在特定地点工作的评估员,只有准备工作 ID。我在实际数据库中加入了 table,所以我确定这种关系很好,但是尝试了各种查询选项但都失败了。

应用信息:

我认为以下是描述您的域的更自然的方式

class Location {

    String name        
    static hasMany = [preparedToWork: Assessor]        
}

class Assessor {    
    //Some Properties

    static belongsTo = [Location]     
    static hasMany = [preparedToWork: Location]
}

然后您可以检索所有准备在某个位置工作的评估员

Assessor.executeQuery(
    "from Assessor a join a.preparedToWork l where l.id = ?", [locationId])

我的域设置与您的略有不同。这是一个例子。

class Location{
   String name

   static hasMany = [assessors: Assessor]

   static  mapping = {
        assessors joinTable: [name: 'preparedToWork', key:'location_id']
   }
} 

class Assessor {    
    static belongsTo = [Location]  

    static hasMany = [locations: Location]

    static  mapping = {
        assessors joinTable: [name: 'preparedToWork', key:'assessor_id']
    }
} 

像这样设置域后,我希望看到 3 个表 地点 评估员 preparedToWork :location_id 和 assessor_id

的组合键

如果我需要找到特定位置的所有评估员,我可以使用以下语句。

def location = Location.where{ name == "some-location" }
def assessors = location.assessors // 

希望这对您有所帮助。

在尝试了许多不同类型的查询后,我使用了分离查询。我确实尝试了解决方案 1,但是我也在查询许多其他属性,下面的查询允许我这样做。

def criteria = new DetachedCriteria(Assessor)
if (preparedToWork) {
  criteria = criteria.build {
    createAlias("preparedToWork", "p")
    eq("p.id", preparedToWork)
  }
}

criteria.list()