簡體   English   中英

如何在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來檢索准備在某個位置工作的所有評估員。 我在實際數據庫中有我的聯接表,所以我確定這種關系很好,但是嘗試了各種查詢選項,但失敗了。

應用信息:

  • 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個表位置評估器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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM