【问题标题】:Hibernate mapping single class to multiple tablesHibernate 将单个类映射到多个表
【发布时间】:2013-08-20 21:55:23
【问题描述】:

由于我是 hibernate 的新手,

我想从一个 html 表单中获取借款人的详细信息,这个表单大约有 45 个字段。这些表单数据必须存储在八个不同的表中。在我们有一对多关系的情况下,一个借款人将有多个家庭成员,家庭成员的详细信息也以相同的表格提交。牢记这一切,我想知道在 hibernate xml 映射中哪个是最好的方法。

我应该在单个类中填充所有 45 个字段并映射它,还是应该为每个表设置单独的类并使用 <joined-subclass> 映射它...?

这是最好的解决方案,当最终用户填写所有表单数据并提交时,数据应存储在所有八个表中。

表结构

User_details, 
user_asset_details, 
user_income_details, 
user_family_members, 
user_family_details, 
user_misc_details

【问题讨论】:

  • this form roughly has 45 fields 你可能无法更改它,这有点离题,但对于单个表单来说,字段太多了!
  • 最好使用 XML 映射,而是使用注释。您应该有多个与 OneToOne、OneToMany 和 ManyToMany 关联关联的实体:一个借款人有多个 FamilyMember。继承是为了一种关系:香蕉是一种水果。
  • 实际上我有 4 个选项卡,每个选项卡包含几个字段,单击下一个按钮用户将导航到下一个选项卡。所以最后当他在最终选项卡中提交时,它必须被存储。
  • 但是我们的项目已经使用了 xml 映射.... 我可以在其余的都使用 xml 时使用注释吗?有没有办法通过将旧映射保留在 xml 中进行迁移
  • 基本上,是的,每个表都应该有一个实体,除非表是纯连接表以包含两个表之间的关联(通常是多对多)。

标签: java database hibernate


【解决方案1】:

我不明白如何在实体中拥有确切数量的字段,但在域模型中也有一对多的关系?当用户有 20 个家庭成员时会发生什么? :-)

您应该定义正确的域模型,定义正确的关系,包括 parent,其中包含 family members 列表字段等。

这个模型应该更符合您的数据库架构,包括 8 个表。

注意join-table 是在数据库建模中表达继承的模式。将一个大类划分为更多表绝对无济于事。 Hibernate 支持名为component 的完全相反的模式,它可以让您在一个数据库表中存储一对一的关系。

当你这样谈论模型时,也许你会对domain driven design感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2014-12-12
    • 2010-12-12
    • 2012-02-06
    • 2012-02-03
    • 2012-01-10
    • 2011-06-19
    • 2023-04-09
    相关资源
    最近更新 更多