2011-07-14 7 views
1

I次のドメインクラスがあります。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の理由は何ですか?これは、2つのキーを組み合わせて、オンザフライでキーを生成することによってこれを行う必要があります... – elCapitano

+0

キーが生成されましたか?はい。アクションを実行するために使用できる1つのID?いいえ。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-compositeid "残念ながら、このアプローチは永続オブジェクトが独自の識別子であることを意味します。オブジェクト自体以外の便利な "ハンドル"はありません。 – Gregg

関連する問題