使用Hibernate

时间:2017-02-03 23:01:52

标签: java hibernate database-design

我正在使用Spring framework + Hibernate启动一个Web应用程序项目。我想在应用程序中为两种不同类型的用户建模:医生患者。他们有一些共同的属性,如姓名,电子邮件,电话号码等,但医生有更具体的属性,如大学数量,专业,研究等。

这是一种简化而没有属性的E-R模型(Hibernate方法)。

enter image description here

如您所见,关系将变为1到1,但其中一个将始终为null。我也讨论过使用继承但是我从来没有在Hibernate中使用它,所以我不知道哪种方法最好,为什么呢。这是最简单有效的方式吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

@Inheritance方法只是在持久化上下文中共享两个托管类型之间的公共属性的一种方法。不要忘记@MappedSuperclass在没有任何层次结构的情况下将两种数据类型耦合在一起时完全相同。

要考虑的一件事是Doctor从域角度来看是否可以是Patient,如果是这样,那么从API角度来看会产生什么影响?

拨打#getPatientDiagnosis(Patient patient)并将其传递给Doctor是否可以接受?从代码的角度来看,它编译并且是合乎逻辑的,因为您选择了继承,但从域的角度来看,这没有任何意义。

这是我经常提倡在域与持久性模型中进行分离的一个原因。从数据存储的数据模型角度来看,通常会有很好的设计决策,但这些决策会在更高的抽象中引入技术债务。

如果是我重复使用我的实体作为我的域模型,我会选择@MappedSuperclass,除非你有另一个令人信服的理由在这种情况下使用继承。

相关问题