【发布时间】:2016-03-18 01:25:46
【问题描述】:
是否可以在 Grails 2.5.x GORM 中保留人工属性?
也可以使用 Hibernate 4 注释/设置。
例如,我希望能够将 DomainObjectC 持久化到具有 3 列(id、do_b_id、do_a_id)的 domain_object_c 表中,以非规范化 do_a_id。
如何让 GORM 创建并填充 domain_object_c.do_a_id 列?:
class DomainObjectA {}
class DomainObjectB {
DomainObjectA doA
}
class DomainObjectC {
DomainObjectB doB
Long getDoAId() {doB?.doAId}
}
【问题讨论】:
-
我不明白你在问什么。如果您想要持久化某些内容,为什么不在类中包含该字段?
-
因为
DomainObjectC#doAId应该始终与DomainObjectC#doB?.doAId相同。我的代码结构以一种简单的方式强制执行此操作,并且不使用任何额外的内存。 -
将
DomainObjectB.doA复制到DomainObjectC的目的是什么?可以做到,但你打算如何保持副本同步? -
目的是数据库非规范化,加快查询速度。您只需通过 GORM 更新数据库即可保持副本同步。这不会将
DomainObjectB.doA复制到DomainObjectC。它只有一个包装方法来访问doA的id。包装器的目的是为 GORM 提供一种简单的方法来将正确的非规范化数据保存到domain_object_c表中。我只是不知道正确的 GORM 或 Hibernate 配置/注释来使该只读属性持久化/
标签: hibernate grails grails-orm hibernate-4.x grails-2.5