2011-07-14 28 views
1

我有以下域類:Grails的複合ID不起作用

class AccountSupplier implements Serializable { 

    static mapping = { 
     table 'MY_TABLE' 
     version false 

     accountReference /*indexColumn: 'ACNTID', */ column:'REFACNTID' 
     supplierReference /* indexColumn:'SUPID' ,*/ column:'REFSUPID' 

     id composite:['accountReference', 'supplierReference'] 
    } 

    Account accountReference 
    Supplier supplierReference 
} 

一切正常,這個除了ID處理。當我嘗試獲取AccountSupplier對象的ID時,我沒有收到任何東西。結果是我無法刪除或編輯某些內容。只有上市沒有工作(沒有ID)

我怎麼可以處理得到,刪除ID ...

感謝。

回答

1

沒有實際的ID。這不是真正的複合ID的工作。你需要在你的課堂上提供一種方法以允許刪除(以及其他東西)

static boolean remove(Account accountReference, Supplier supplierReference, boolean flush = false) { 
    AccountSupplier instance = AccountSupplier.findByAccountAndSupplier(accountReference, supplierReference) 
    instance ? instance.delete(flush: flush) : false 
} 
+0

是的,我對此有所瞭解。但爲什麼我必須自己實施呢?那麼複合ID的原因是什麼?它應該通過組合這兩個鍵,通過生成密鑰來實現... – elCapitano

+0

keys generated?是。一個您可以用來執行操作的ID?不。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-compositeid 「不幸的是,這種方法意味着持久對象是它自己的標識符。除了對象本身之外,沒有方便的「處理」。「 – Gregg