【发布时间】:2010-10-19 17:08:17
【问题描述】:
我打算使用 Hibernate 创建一个依赖于 DB 的应用程序。我会有一些类似的班级,比如老师和学生等等。在 DB 中,它们会有一些名称相似的字段。所以我想知道我是否可以为标准字段(如 Name、SName 等)创建一个带有注释的类 Human,以便在教师学生等中扩展该类。它会起作用吗?有人这样用吗?
【问题讨论】:
标签: java hibernate inheritance abstract-class
我打算使用 Hibernate 创建一个依赖于 DB 的应用程序。我会有一些类似的班级,比如老师和学生等等。在 DB 中,它们会有一些名称相似的字段。所以我想知道我是否可以为标准字段(如 Name、SName 等)创建一个带有注释的类 Human,以便在教师学生等中扩展该类。它会起作用吗?有人这样用吗?
【问题讨论】:
标签: java hibernate inheritance abstract-class
我建议教师和学生不是人类的子类,而是人类可以扮演的角色。如果您将它们设为子类,那么您实际上是在说老师永远不能成为学生,反之亦然。 此外,如果一个人从学生变成老师(反之亦然),那么您就会失去该对象的任何关联和历史。 而是考虑角色。在这个例子中考虑组合和委托而不是继承。 请查看 Peter Coad 的书:Java 设计以了解更多信息。
此外,如果您决定使用继承,您确实需要考虑表的实现:单个表(子类型属性为空列)单独的表或超类的单独表和子类的单独表。
【讨论】:
Hibernate 广泛支持涉及继承和多态的不同场景。请参阅文档
http://docs.jboss.org/hibernate/stable/core/reference/en/html/inheritance.html
简短的回答是,是的,您可以完全按照自己的意愿行事——创建一个基类,其中包含子类共有的字段。它的难度/参与程度取决于您如何构建表格。
【讨论】: