GORM-获取域类属性的原始DB值



我在Grails 3 Web应用中使用Gorm来管理DB的读/写入。

我有以下2个域类:

class Company {
  String id
}
class Team {
  String id
  Company company
}

对于团队,他们的公司作为字符串保存在DB上,而Gorm我可以简单地使用team.company获取Company域类实例。

但是,我需要覆盖company的GETTER,并且我需要公司ID的原始值(如DB上存储(,而不会妨碍Gorm并执行其魔术。有没有办法获取原始字符串值?

欢迎任何帮助!预先感谢


更新(5月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(引用手册(tries to be as compatible as possible with GORM for Hibernate,但需要稍有不同的实现。

但是,我发现(通过审判&错误(,gorm for mongoDB不支持类似的解决方案,因为似乎一次只能将一个属性映射到mongoDB文档属性。

特别是按字母顺序的最后一个属性获胜,例如在我的示例中companyId


我想出了一种使整个事情起作用的方法,我在下面发布了自己的答案。

在域类中给定了不可用的不可插入的列" compandId"

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

(请按照我的问题进行编辑(

我定义了一个自定义映射,并通过定义团队公司的自定义getter和设定器来使用Grails Transionts。

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
  }
}

最新更新