【问题标题】:Partition a large Hibernate model to manage schema dependencies对大型 Hibernate 模型进行分区以管理模式依赖项
【发布时间】:2011-04-14 22:14:28
【问题描述】:

我们正在考虑将我们的休眠表拆分为包或域(发票、销售、..等),主要是为了解决依赖管理问题。

当然,它并没有完全中断,所以我们不确定如何处理跨域的关系。对此有一个新的实体注释会很好,但同时一个想法是制作模型的多个副本,其中关系的注释方式存在一些变化,以“剪断松散的末端”。这些更改的实体可能需要在它们不属于的其他模型中设置为“只读”。此外,我们将继续使用现有的完整模型一段时间,因为我们将应用程序转换为使用较小的应用程序。

因此,例如,大多数表应该完全存在于一种或另一种模型中;但如果 Domain1.Table1 与 Domain2.Table2 相关,那么您将在对方的域中制作每个的只读副本。该副本会将其域中的其他关系更改为“死胡同”(可能通过将关系链接替换为整数 fk 引用属性)。

关键是,我们希望有一些方法来管理我们的 maven 构建,以便当有人更改表上的属性时,我们已经声明了对该域模型的依赖关系,因此我们可以减少应用程序的数量需要重建。 (我们有严格的部署中断窗口)。

哦,所有域都必须使用相同的 java 包才能与我们的旧版 EJB 持久性工具兼容

这就是想法。有什么建议/反馈/cmets?谢谢!

【问题讨论】:

    标签: hibernate maven-2 model annotations packaging


    【解决方案1】:

    您建议将相关表的实体复制到所需的域(而不是它的域)中,然后将其自身的域依赖项更改为“死端”,即整数 FK 值,如有必要,可能会用于进行查找。

    我的建议是您应该在每个域的边缘执行此操作,并且不要复制任何内容。因此,如果 Domain1.Table1 与 Domain2.Table2 相关,它只是有一个 FK,int 字段可能称为 table2Id。这将在每个域的边缘创建死胡同,而不需要交叉和复制。

    我不得不问...

    您确定您有多个域吗?

    您的问题的根源似乎来自您的数据相关的事实,这向我表明它们是同一域的一部分。例如,您将销售和发票视为单独的域,但它们可能都共享客户参考。这一切都感觉像是属于我的。一些项目/行业的领域很大,为了方便和简单而将它们拆分通常最终会成为一个错误,并且通常会增加意想不到的复杂性。例如,如果您需要进行应包含发票参考的销售查询,但现在您必须进行单独的发票查询,这会使您的 API 的客户使用量有点重。

    【讨论】:

    • 不,它确实是一个域;这就是问题所在——任何分裂都是人为的,并且有一定程度的痛苦。看起来我们有两个选择——当前的方式只是一个大的“模型”依赖——每次任何部分发生变化时,我们所有的应用程序都需要重建。另一个极端是每个表的依赖项 - 需要仔细检查客户端以查看要声明的依赖项,但我想当模型的部分更改时我们会有更小的重建集。我希望有一些中间路径,但还没有找到任何东西。
    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2016-09-16
    • 2013-08-20
    • 2019-08-28
    • 2011-05-03
    • 1970-01-01
    • 2010-11-30
    • 2010-11-15
    相关资源
    最近更新 更多