2012-03-31 3 views
0

私のアプリでGrails Datasourcesプラグインを使用していて、読み取り専用の関連付け(親)を参照している(chidl)クラス。たとえば、次のようにGrails Datasources "子行を追加または更新できません:外部キー制約が失敗しました"

/* Parent domain class; a read-only datasource using the Datasources plugin */ 
class Parent { 
    //...Some fields 
} 

/* Child domain class, referencing the parent class */ 
class Child 
    // Some fields 
    static hasOne = [parent:Parent] 
} 

私は試してみて、私の子クラスを永続化するとき、私は

このエラーが出る
Cannot add or update a child row: a foreign key constraint fails 
(`foo`.`child`, CONSTRAINT `FK38A5EE5F707D1A2B` 
FOREIGN KEY (`id`) REFERENCES `parent` (`id`)) 

私はGrailsの(読み取り専用)から参照されるテーブルの地元、空のコピーを作成していることに気づいdatasource Aへ私のローカル(書き込み可能)datasource Bは、起動時にテーブルが作成されるときに表示されます。代わりに、このテーブル(およびその新しく作成されたFK)を参照することができますか?その場合、実際のデータソース(つまり、datasource A)にFK制約が適用されないのはなぜですか?

私は、これは愚かな質問のよう

答えて

1

を鳴らした場合、プラグインは、データベース間でこのような関係をサポートしていませんので、申し訳ありませんGrailsのにかなり新たなんだ、とどこか他のこの特定の問題の解決策を見つけることができませんでした。 GORMはおそらく、他のドメインクラスが別のデータベースに存在することを認識していません。

このエラーを回避する方法は、親行への参照を格納することであろう、のようなもの:http://markmail.org/message/omllq46sn3d2l6ah

+0

ご提案してくれてありがとう、とリンク:

class Child{ long parentId Parent getParent(){ Parent.get(parentId) } } 

はこれを参照してください。私のセッターはどんなものになるのかアドバイスできますか? Parentのリファレンスも必要ないでしょうか? また、フィールドを一時的にマークしていても、データベース/テーブルを削除して再作成したときに、読み取り専用データソースの親テーブルへの外部キー参照がまだ作成されていたことに気付きました。 – raven

+0

あなたのセッターはちょうど何かのようになりますvoid setParent(parent){parentId = parent.id} –

+0

dbCreateがデータソースに設定されていて、GORMがそれほどスマートではないので、おそらく親を作成します。 –

関連する問題