在数据库表级继承,Jpa Joined策略

时间:2012-03-05 12:38:01

标签: database-design inheritance jpa single-table-inheritance

我一直在使用数据模型很长一段时间。我现在相信这个模型存在缺陷,但我不确定如何改进它。

基本上,我的域名模式是一个小型广告网站,供寻求保姆的幼儿/保姆和寻求婴儿照顾的父母

域模型目前有一个基本帐户类,该类由两个 ParentAccount ChildminderAccount 类子类化。我还有基础广告类,它由三个 ChildminderAdvertisement ParentToParentAdvertisment ParentToChildminderAdvertisement 类子类化。

大多数属性对于子类是通用的,因此位于超类中。

列出子类之间的一些差异:

  • ChildminderAccount可能附有课程/简历,但ParentAccount可能没有。
  • 通过指定Childminder(通用)是否是保姆(特定)/ BabySitter(特定)/等来进一步细化ChildminderAccount。

这意味着ChildminderAccount子类与ParentAccount子类没有的其他表有关系。

继承当前由JPA层使用Joined策略实现(请参阅JPA文档:@Inheritance(strategy=InheritanceType.JOINED))参见图表。enter image description here

我面临着当前设计的一些问题:

  • 我在运行基类常用操作时遇到问题。
  • 我经常发现自己重新实现了子类的方法,我有太多的DAO。

正如我上面所说,我不确定如何改进设计:是否完全放弃继承(db级别)或是否采用另一种继承策略......

任何线索欢迎。

1 个答案:

答案 0 :(得分:0)

那么,JPA人员制作所有“继承策略”的原因是在使用SQL表(通过JPA实体)时更接近地模拟OO多态性。你确定你正在利用这个功能。

例如,如果您想要所有帐户类型条目(无论它们是实际的ParentAccount还是ChildminderAccount),您可以执行以下操作:

SELECT a FROM Account a WHERE ...."