GORM - получить необработанное значение БД для свойств класса домена - PullRequest
0 голосов
/ 22 мая 2019

Я использую GORM для MongoDB в своем веб-приложении Grails 3 для управления чтением / записью из БД.

У меня есть следующие 2 класса домена:

class Company {
  String id
}

class Team {
  String id
  Company company
}

Для командих компания сохраняется в БД как String, и с помощью GORM я могу просто использовать team.company для получения экземпляра Company класса домена.

Однако мне нужно переопределить метод получения для company,и мне нужно необработанное значение для идентификатора компании (как хранится в БД), без вмешательства GORM и выполнения его магии.Есть ли способ получить необработанное значение String?

Любая помощь приветствуется!Заранее спасибо


Обновление (27 мая)

Изучая предложение @TaiwaneseDavidCheng, я обновил свой код до

class Company {
  String id
}

class Team {
  String id
  Company company
  String companyId

  static mapping = {
    company       attr: "company"    // optional
    companyId     attr: "company", insertable: false, updateable: false
  }
}

Обратите вниманиечто я использую GORM для MongoDB, которая (ссылаясь на manual ) tries to be as compatible as possible with GORM for Hibernate, но требует немного другой реализации.

Однако я обнаружил (методом проб и ошибок), что GORM для MongoDBне поддерживает подобное решение, так как кажется, что только одно свойство за один раз может быть сопоставлено со свойством документа MongoDB.
В частности, выигрывает последнее свойство в алфавитном порядке, например, companyId в моем примере.


Я нашел способ заставить все это работать, я выкладываю свой собственный ответ ниже.

Ответы [ 2 ]

1 голос
/ 23 мая 2019

с учетом не вставляемого необновляемого столбца «companyId» в доменном классе

class Company {
  String id
}

class Team {
  String id
  Company company
  Long companyId
  static mapping = {
    company               column:"companyId"
    companyId               column:"companyId",insertable: false,updateable: false
  }
}

0 голосов
/ 27 мая 2019

(после редактирования моего вопроса выше)

Я определил пользовательское отображение и использовал переходы Grails , также определив пользовательский геттер и сеттер длякомпания команды.

class Company {
  String id
}

class Team {
  String id
  Company company
  String companyId

  static mapping = {
    companyId     attr: "company"    // match against MongoDB property
  }

  static transients = [ 'company' ]  // non-persistent property

  Company getCompany() {
    return Company.get(companyId)
  }
  void setCompany(Company company) {
    companyId = company.id
  }

}
...