我有以下域类:
class PreparedToWork {
String location
static hasMany = [assessors: Assessor]
}
class Assessor {
//Some Properties
static belongsTo = [PreparedToWork]
static hasMany = [preparedToWork: PreparedToWork]
}
我想检索准备在某个位置工作的所有评估员,只准备工作ID。我在实际的数据库中有我的连接表,所以我确定这种关系很好但是已经尝试了各种查询选项并且失败了。
应用信息:
答案 0 :(得分:2)
我认为以下是描述您的域名的更自然的方法
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])
答案 1 :(得分:0)
我会设置我的域名与您拥有的域名略有不同。这是一个例子。
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 //
希望这会有所帮助。
答案 2 :(得分:0)
在尝试了许多不同类型的查询后,我使用了一个分离的查询。我确实尝试过解决方案1但是我也在查询许多其他属性,下面的查询允许我这样做。
def criteria = new DetachedCriteria(Assessor)
if (preparedToWork) {
criteria = criteria.build {
createAlias("preparedToWork", "p")
eq("p.id", preparedToWork)
}
}
criteria.list()