[英]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來檢索准備在某個位置工作的所有評估員。 我在實際數據庫中有我的聯接表,所以我確定這種關系很好,但是嘗試了各種查詢選項,但失敗了。
應用信息:
我認為以下是描述您的域的更自然的方法
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個表位置評估器prepareToWork:location_id和評估者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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.