2015-11-17 15 views
0

我們有兩個領域類像下面的Grails GORM協會不同FK在複合類

package com.x.y.z; 
Class A { 
    String name 
    String status 
    String specialID 


static mapping = { 
    id type:Long, sqlType:'INT' 
} 

} 

    package com.x.y.z; 
    Class B { 
    A a 
    String name 

    } 

現在,當我們把我們的服務器和數據表中的彈性開始被編入索引上的bulkload我們得到錯誤

通過ObjectNotFoundException引起:沒有排與所述給定的標識符存在:[com.xyzA#300]

消息:無法馬歇爾域實例[com.xyzB:675]

可能發生的情況是編組B時,對象在A.id中搜索FK時,實際上應該查看A.specialID。我能夠在數據庫中查找一個specialID 300,而表A的ID沒有300.我們希望B的實例查找A.specialID而不是默認的A.id。這可能嗎?我們沒有使用hasOne映射,因爲在這種情況下雙向映射不合適。感謝任何關於繪圖的幫助。

回答

1

我假設域類AIDspecialID

Class A { 
    ... 

    static mapping = { 
     id type:Long, sqlType:'INT', name: 'specialID' 
    }  
} 

我不確定主鍵是什麼表a,但假設它是... foo,那麼你可以:如果是這樣的話,那麼你可以從這樣的默認ID屬性更改這樣設置欄:

Class A { 
    ... 

    static mapping = { 
     id type:Long, sqlType:'INT', name: 'specialID', column: 'foo' 
    }  
} 

你可以在Grails的documentation閱讀更多關於ID映射。

+0

A的PK ID是id(自動遞增),它是基於String的專用ID的獨立字段 – Noosphere

+0

那麼,不,你不能有一個域類B查找A.specialID而不是缺省的A.id,因爲GORM查詢只能通過其域類關聯來連接表:主鍵到外鍵。 –