2017-07-30 8 views
0

を結果驚くべき私はこのような自己参照ドメインクラスがあります。Grailsの自己参照ドメインクラス保存

class Person { 
    String name 
    Person father 
    Person mother 
} 

を私が父または母

にはhasManyのか、他の制約を持っていない私は挿入サービスを持っています.csvファイルから新しいエントリ

Person father = Person.findBy(newPersonFatherName) 
Person mother = Person.findBy(newPersonMotherName) 
Person newPerson = new Person(
    name: newPersonName, 
    father: father, 
    mother: mother) 
newPerson.save() 

これは何が実行されたときに発生することは母方の祖母と父方の祖父であるが、両方のNEと同じインスタンスに設定されている次のようにwPerson。保存する前に、私は次の2行を挿入することで、これは離れて行くことができます

()

Person pgf = father.father 
Person pgm = father.mother 
Person mgf = mother.father 
Person mgm = mother.mother 

、私は全部が何とかカスケードに保存されます関連していると思いますが、私は実際に問題を理解することができませんよコードでそのようにあまり理解されていない解決策を残すことには消極的です。

誰でも手助けできますか?前もって感謝します!

+0

'findBy'が自分のものであるかどうか不明ですが、' findByName'であってはなりませんか?また、名前は非常にユニークではなく、しばらくすると 'findByName'は最初の一致する結果を見つけるので正しい結果を得られません –

+0

こんにちはマイク、コメントに感謝します。簡単に言えば、上記は単純なバージョンです。ここでは、無関係な属性などを取り除いた場所を単純化しています。この場合、findByは、この例ではfindByNameでなければなりません。 Grailsのドキュメントでその例を見つけることができます)。そして一意性に関しては、あなたのポイントは正しいですし、実際には私は他の属性も 'findBy'で使用しています。しかし最終的には、私が言及していることです。すなわち、祖父母は何とか元のコードによって間違って更新されます。 – MonetsChemist

+0

サンプルプロジェクトを作成してここにリンクするのが最も良い方法です –

答えて

0

この問題はGrails 2.5.5とGrails 3.3の間のどこかで消え去ってしまったようですので、私はこれを答えて解決するようにマークします。