正如上面的红色区块(警告这是一个主观问题并且可能会被关闭),可能没有一个石刻法,但我不明白为什么这样才能结束一个问题。
......撇开
我计划将Hibernate作为我的持久性框架实现,这可能会在实现时修复我的问题,但我有DB表转换为类和子类(现有生活中存在的许多细节和复杂性被省略:)) :
//dbo.a with column Name
class a {
public String Name;
}
//dbo.b with column Name and a foreign key to dbo.a
class b extends a {
public String Name;
}
那么,为了应该做什么以及为什么:
遮蔽:
我可以按原样保留这些,当处理编译时类型未知的对象时,这需要一些反射聪明(每http://forums.sun.com/thread.jspa?threadID=5419973)。
化合物名称:
我可以将我的所有字段命名为其类的名称,即a.aName
和b.bName
,这在现实生活中变得非常丑陋:Door.DoorName
和RotatingDoor.RotatingDoorName
吸气者和二传手:
我没有提到这个,因为使用JavaBeans这些将从字段名称派生,我相信Hibernate使用带注释的POJO。
为了稍微影响结果,阴影似乎是最强大的,至少在我的情况下,类a
扩展了一个定义了Name
的抽象类,然后是b
阴影适用时自己的Name
。使用复合名称意味着如果我想在我的所有数据库表中添加NickName
列,那么我必须将该字段添加到每个类型(然后继承点是什么?!)
最后,我决定找出那些曾经经历过这些技术的一个或多个实施的利弊的人,不得不在这个问题上说出来;或者那种方便的石刻最佳实践会做:)
-Nomad311
答案 0 :(得分:0)
如果您需要在所有子类中使用它,则只应在基类中定义您的成员。 hibernate为类树提供了各种类型的映射。请查看手册中的Inheritance mapping以了解它。
您可以通过xml文件或注释来定义映射。