如何使用Hibernate Web应用程序编写Spring?

时间:2012-10-07 00:32:46

标签: spring hibernate

我正在开发Web应用程序,其中我有一个Person类的90个字段,分为家庭详细信息,教育详细信息,个人详细信息等....

我希望每个人都有单独的表格,比如家庭详细信息有父亲姓名,母亲姓名兄弟姐妹等...其他地方等等

我希望每个细节都有单独的表,所有表的公共引用ID

我的问题是我应该写多少个bean类?是否可以将一个bean类从多个表格映射到多个表格?

class PersonRegister{
  private Long iD;
  private String emailID;
  private String password;
   .
    .

     }//for register.......

登录后我需要保留他/她的详细信息

要么

class person{
}

class PersonFamilyDetails{}
class PersonEducationDetails{} 
etc

软件开发标准指定创建哪种方式?

2 个答案:

答案 0 :(得分:0)

不要太过分了,我相信你的情况是单一但非常(即有很多列)表从维护角度来看是最有效和最简单的。唯一要记住的是,在加载大量行时,只查询列/字段的必要子集。否则,您将获取千字节的不必要数据,而不是特定用例所需。

不幸的是,Hibernate没有直接的支持,在为Person设计映射时,你最终会遇到巨大的类,甚至更糟 - Hibernate将总是获取所有简单的列(以及许多 - 一个关系)。但是,您可以通过在仅包含列子集的数据库中创建多个视图,或者通过将多个Java类映射到同一个表但仅映射到列的子集来克服此问题。

仅当您的架构未规范化时,才将数据库模型拆分为多个表是有益的。例如。当存储兄弟姐妹的名字和姓氏时,你可能希望有一个单独的Sibling表格,下次输入其他一些家庭成员时,你可以重复使用同一行。这使得数据库更小,并且在通过兄弟搜索时可能更快。

答案 1 :(得分:0)

你的问题归结为数据库规范化,正如Boyce和Codd深入描述的那样 http://en.wikipedia.org/wiki/Database_normalization

数据库规范化的主要优点是避免修改异常。在您的情况下,如果您为每个人准备了一张桌子,例如父亲名字父亲姓氏,并且您有多个人拥有相同的父亲,这些数据将被复制,当您发现父姓的拼写错误时,你可以修改一个兄弟,而不是下一个。

在这个简化的案例中,数据库设计最佳实践要求首先将标准化归入一个单独的表,其中包含 father-id 父亲名字父亲 - 姓氏,以及与您的表有一对多的关系。

对于一对一关系,例如 - > personeducationdetails ,有一些争论。在第一范式的原始定义中,每个可选字段都将通过放置自己的表来规范化。后来通过在关系数据库中引入“null”来削弱这一点,请参阅http://en.wikipedia.org/wiki/First_normal_form#cite_note-CoddRule-12。但是,如果整个列的列可以同时为null,则将它们放在一个具有一对一关系的单独表中。

E.g。如果你不知道一个人的教育细节,那么它的所有相关字段都是空的,所以你最好把它们分开放在一个单独的表中,而不是那个人<的 personeducationdetails 记录/强>