如何在 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,所以我确定这种关系很好,但是尝试了各种查询选项但都失败了。
应用信息:
- Grails 版本:3.1.8
- Groovy版本:2.4.6
- JVM 版本:1.8.0_60
我认为以下是描述您的域的更自然的方式
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()
我有以下域 类:
class PreparedToWork {
String location
static hasMany = [assessors: Assessor]
}
class Assessor {
//Some Properties
static belongsTo = [PreparedToWork]
static hasMany = [preparedToWork: PreparedToWork]
}
我想检索所有准备在特定地点工作的评估员,只有准备工作 ID。我在实际数据库中加入了 table,所以我确定这种关系很好,但是尝试了各种查询选项但都失败了。
应用信息:
- Grails 版本:3.1.8
- Groovy版本:2.4.6
- JVM 版本:1.8.0_60
我认为以下是描述您的域的更自然的方式
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()