Hibernate свойство-Ref эквивалент не присутствует в Grails - PullRequest
1 голос
/ 17 ноября 2011

Я новичок в Grails и в настоящее время пытаюсь отобразить класс Employee.Каждый сотрудник может иметь или не иметь менеджера.Также у каждого сотрудника (если он менеджер) будет список подчиненных.Отображение до такой степени было относительно легко с hasMany и принадлежит статическим массивам.Однако мой пример имеет дополнительную сложность.У меня есть 3 столбца в классе моего сотрудника:

  • id (первичный ключ)
  • ldapId (идентификатор из устаревшей системы ldap)
  • managerLdapId (менеджеридентификатор связи из прежней системы).

Мой класс Employee на данный момент выглядит следующим образом -

class Employee {
    String firstname
    String lastname
    String email
    String ldapId
    Employee manager

    static hasMany = [subordinates: Employee]
    static belongsTo = [manager: Employee]
}

Проблема заключается в том, что я хочу отобразить мои отношения hasMany с помощью ldapIdполе, но Grails по умолчанию это поле id.Я мог бы сделать поле ldapId в качестве первичного ключа, но поле id также существует, и это естественный первичный ключ для этой таблицы.

Я знаю, что в hibernate была опция, которую мы могли указать при определении отношений «многие к одному».Это был атрибут property-ref, который позволял сопоставлять отношения со столбцом, отличным от первичного ключа.Есть ли такая собственность для Грааля?Если да, то как это можно реализовать?

Подводя итог, мне нужно знать, как отобразить связи hasMany с ключом, отличным от первичного ключа для этой таблицы.

1 Ответ

0 голосов
/ 17 ноября 2011

Я так думаю:

class Employee {
  String firstname
  String lastname
  String email
  String ldapId
  Employee manager

  static hasMany = [subordinates: Employee]
  static belongsTo = [manager: Employee]

  static transients = ['getId', 'setId']

  def getId() { ldapId }
  def setId(id) { this.ldapId = id }

  static mapping = {
    table 'Employee'
    id generator:'assigned', name:'ldapId', type:'string'
    ...
  }
}

Не забудьте сделать ldapId уникальным

...