多対多の関係を調整するために、連想テーブルをグレイルで作成することについて質問があります。設定は次のとおりです。1。ドメインA(クライアントプロファイル)は多くのドメインB(友達)を持つことができます2.各ドメインB(友達)は多くのドメインA(クライアントプロファイル)を持つことができます3.これを解決するには、連想体を作成する必要があります各テーブルのFKを持つテーブル(またはドメイン)。このドメインには、ドメインC(client_friend)という名前を付けることができます。
これが私がこれまでに持っているコードです:
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
}
このコードを実行すると、機能しているようです。MySQLを使用してテーブルが作成され、FKが配置されているようです。DomainBクラスにデータを入力すると、データが入力され、DomainAとDomainBの両方のPKがA_Bに挿入されます。しかし、A_Bから値を削除しようとすると問題が発生します。私はこのようなことを試しました:
AB results =AB.findByAIdAndBId('jIi-hRi4cI','2BYvuA2X14')
ただし、エラーが発生します:InvalidPropertyException:クラス[classmgr.AB]の名前[a_id]のプロパティが見つかりません
私の質問はこれです:最初に、私はこれを正しく設定しましたか?次に、もしそうなら、PKがDomainAとDomainBのコンポジットで構成されているABテーブルをクエリするにはどうすればよいですか?
助けてくれてありがとう。
ジェイソン