多対多リレーションシップを調整するために、grailsで関連テーブルを作成する方法について質問があります。 1.ドメインA(クライアントプロファイル)は多くのドメインB(フレンド) を持つことができます。2.各ドメインB(フレンド)は多くのドメインA(クライアントプロファイル)を持つことができます 3.これを解決するには、各テーブルからFKを持つAssociativeテーブル(またはドメイン)を作成します。Grailsドメイン作成関連テーブル
class DomainA{
String id
String firstName
String lastName
static hasMany = [domainB: DomainB]
static mapping = {
cache true
id generator: 'assigned'
columns {
firstName type:'text'
lastName type:'text'
alumConnections column: 'domaina_id', joinTable: 'a_b'
}
}
static constraints = {
firstName (nullable:true)
lastName (nullable:true)
}
}
DomainBのコード:
class DomainB{
String id
String firstName
String lastName
static hasMany = [domainA:DomainA]
static belongsTo = DomainA
static mapping = {
cache true
id generator: 'assigned'
columns {
firstName type:'text'
lastName type:'text'
domainA column: 'domainb_id', joinTable: 'a_b'
}
}
static constraints = {
firstName (nullable:true)
lastName (nullable:true)
}
}
ドメインA_Bコード:
class AB{
Date dateCreated
Date lastUpdated
long version
}
このドメインは
ここで私がこれまで持っているコードは、ドメインC(client_friend)と命名することができます
このコードを実行すると、動作するようです。 MySQLを使用したテーブルが作成され、FKが適切に配置されているようです。 DomainBクラスにデータを入力すると、データが入力され、DomainAとDomainBの両方のPKがA_Bに挿入されます。しかし、A_Bから値を削除しようとすると問題が発生します。私はこのような何か試してみた:
AB results =AB.findByAIdAndBId('jIi-hRi4cI','2BYvuA2X14')
をが、エラーを取得:InvalidPropertyException:名前が見つかりませんプロパティ[A_ID]クラスの[クラスmgr.AB]
は、私の質問はこれです:最初に、持っています私はこれを正しく設定しましたか?第二に、もしそうなら、どのようにして私はABテーブルを照会するのですか?PKはDomainAとDomainBの複合体で構成されていますか?
ありがとうございました。
jason
ありがとうございます。私の例では、DomainAとDomainBはどうですか?私は彼らの「所属」と「たくさんある」を取り除く必要がありますか? – jason
はい、それらは必要ありません。私はそれをどう扱うかを反映するように答えを更新します。 – Gregg
ありがとう、私はこれらの変更を実装し、どのように動作するかを見てみましょう! – jason