2017-02-18 71 views
0

當孩子類可能屬於父級(但不是兩者)中的兩個屬性之一時,我無法在Grails中掌握belongsTo - hasMany關係的概念。grails belongsTo映射到另一個類中的屬性

例如:

class Store { 
    Integer storeNumber 
    List employees 
    List managers 

    static hasMany = [employees:Person, 
         managers:Person] 
} 

class Person { 
    String name 
    String roll 

    static belongsTo = [store:Store] 

    static constraints = { 
     role inList: ['employee','manager'] 
    } 
} 

哪裏人在Store.employees的名單或Store.managers

我在地圖上的人得到一個錯誤,有「重複列的列表。 ..「。我嘗試了一些靜態映射嘗試,但仍不理解如何正確執行。

我該如何正確映射這個?

在此先感謝....

回答

0
class Store { 
    Integer storeNumber 
    //List employees 
    //List managers 

    static hasMany = [employees:Person, 
         managers:Person] 
    static constraints = { 
     employees(nullable:true) 
     managers(nullable:true) 
    } 
} 

class Person { 
    String name 
    String roll 

    static belongsTo = [store:Store] 

    static constraints = { 
     role inList: ['employee','manager'] 
    } 
} 

現在添加商店

Store store = new Store(storeNumber: 1).save() 
if (store) { 
    Person person = new Person(name:'fred', roll:'employee', store:store).save() 
    if (person) { 
    store.addToEmployees(person) 
    } 
} 

所以很明顯有頭痛,增益爲反向lookingup父的快捷方式,選擇是鬆散的關係如下所述,不關心父母,所以你不需要這最後一點,並明顯地鬆動你迄今命中的依賴性問題

結束E2A

你需要一個有其他關係

另外,如果你不關心屬於關聯關係,那麼事情會更容易喜歡

static belongsTo = Store 

那麼該因素已不再一個問題。

不同的是與你有VS我向您展示了後者目前的方法 - 你可以從一個孩子反向走回父母很容易,如果查詢是從孩子

無論哪種方式,你總是可以從父母開始查詢開始然後再加入兒童和尋找孩子方面

等什麼套房,爲您先生

最後編輯 當你在做這個東西了多年,你覺得以另一種方式做事的方法你知道:

假設您確實設置了一個從Parent to Child開始的鬆散/弱引用,並且您想訪問Parent。這裏是如何:

Class User { 
    String username 
    static hasMany=[childs:Children] 
} 

Class Children { 
    String firstName 
    static belongsTo=User 

    // now to get access back to parent user without knowing parent a hackish thing like this can be done: 

    User getUser() { 
     User.findByChilds(this) 
    } 
    String getUserName() { 
     return user?.username 
    } 

} 

現在從一個孩子,你可以做$ {} instance.user或$ {} instance.userName,那麼這將綁定回父和子對象本身findByChilds(this)年前的這個本來找我猜我翹曲

+0

工作得很好!我現在看到,我不需要明確定義員工和經理的名單......因爲我通過hasMany將他們帶入課堂?謝謝! – dm123

+0

對不起,我犯了一個錯誤在那裏,我修正了它簡而言之,你只是獲得反向查找功能作爲一個鬆散的關係,更容易管理,但鬆散的能力,這種能力 – Vahid

+0

ofcourse最重要的因素是家長有空可以爲hasMany,否則它是一個循環這是想要的,因爲它需要這個,所以沒有這個能力 – Vahid