Grails:扩展和嵌入域类有啥区别?

Posted

技术标签:

【中文标题】Grails:扩展和嵌入域类有啥区别?【英文标题】:Grails: What is the difference between extending and embedding a domain class?Grails:扩展和嵌入域类有什么区别? 【发布时间】:2015-07-26 10:53:12 【问题描述】:

我对 Grails 框架非常陌生,所以请多多包涵。

尽管如此,我对扩展域类和嵌入对象之间的功能差异感到有些困惑。 从数据库的角度来看,它们都做同样的事情。嵌入对象时,所有类的所有属性都存储在一个表中。类似地,当扩展一个类时(使用 table-per-hierarchy),所有类的所有属性都存储在一个表中。

我确定这两者之间存在功能差异,所以我想我会问这个问题。 你什么时候使用其中一个?

【问题讨论】:

【参考方案1】:

唯一的技术区别是在扩展类时能够通过每个子类属性的表拥有多个表。否则,它们在使用上是相同的。

不过,也就是说,通过扩展另一个类,您也在类结构中对其进行建模,以便您可以利用 Java/Groovy 的 instanceof 和多态特性。

【讨论】:

我认为您只能通过 table-per-subclass 属性拥有多个表,而不是通过 table-per-hierarchy。我完全忘记了 instanceof 和多态的使用。谢谢。 你是对的,它是每个子类。我已经更新了答案。

以上是关于Grails:扩展和嵌入域类有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Grails 中嵌入 jqPlot?有啥特殊标签吗?

在 Grails 中使用 java 类

如何从 Grails 控制器和视图外部引用 Grails 域类字段?

GRAILS ---命令 grails war 和 gradle build 有啥区别?

Grails 获取子域对象

带嵌入式的 Grails 脚手架