2 つのテーブルがあり、そのうちの 1 つ (レガシー テーブル: A) には、複合外部キーとして機能する 2 つのフィールドがあり、もう 1 つ (新しいテーブル: B) は、each row:A has one row:B
リレーションシップに複合主キーを使用する必要があります。これらのテーブルを GORM で説明するにはどうすればよいですか?
これまでのところ、レガシー テーブルを反映するドメイン クラスを作成できました。
class A {
...
//composite foreign key to link B class
String className;
String eventName;
B b; //instance of B to be related
static mapping = {
table 'a_table';
id column: 'id';
className column: 'class_name';
eventName column: 'event_name';
//b: ???
}
}
new class:B
これは機能しますが、と の関係を作成できません。
B を次のように宣言しようとしました。
class B implements Serializable{
static auditable = true;
String name;
String className;
String eventName;
static mapping = {
//supposed to make a composite PK
id composite:[className, eventName]
}
}
しかし、これはコンパイルできません
ERROR context.GrailsContextLoader - Error executing bootstraps: Error evaluating ORM mappings block for domain [com.package.B]: No such property: eventName for class: org.codehaus.groovy.grails.orm.hibernate.cfg.HibernateMappingBuilder
私が欲しいのは次のようなものです:
static mapping = {
...
b composite: [b.className:className, b.eventName:eventName]
//or whatever is the right way for this to be done.
}
A クラスが GORM にこの関係を処理させるようにします。