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