私はgrailsが初めてで、現在Employeeクラスをマップしようとしています。各従業員にはマネージャーがいる場合といない場合があります。また、各従業員 (マネージャーの場合) には、部下のリストがあります。この範囲へのマッピングは、hasMany および belongsTo 静的配列を使用すると比較的簡単でした。ただし、私の例はさらに複雑です。従業員クラスに 3 つの列があります。
- id (主キー)
- ldapId (従来の LDAP システムの ID)
- managerLdapId (従来のシステムからのマネージャー関係 ID)。
現在の私のEmployeeクラスは次のようになります-
class Employee {
String firstname
String lastname
String email
String ldapId
Employee manager
static hasMany = [subordinates: Employee]
static belongsTo = [manager: Employee]
}
問題は、ldapId フィールドを使用して hasMany 関係をマップしたいのですが、grails ではデフォルトで id フィールドに設定されていることです。ldapId フィールドを主キーとして作成することもできましたが、id フィールドも存在し、このテーブルの本来の主キーです。
Hibernate には、多対 1 の関係を定義する際に指定できるオプションがあったことを知っています。主キー以外の列への関係のマッピングを可能にしたのは、property-ref 属性でした。そのようなプロパティはgrailsで利用できますか? もしそうなら、どのように実装できますか?
要約すると、そのテーブルの主キー以外のキーを使用して hasMany リレーションシップをマップする方法を知る必要があります。