代码之家  ›  专栏  ›  技术社区  ›  David Plumpton

如何在需求增长时控制Hibernate映射的使用

  •  1
  • David Plumpton  · 技术社区  · 16 年前

    我已经开发了许多Java web应用程序,其中持久性是通过Hibernate实现的,我们从一些中心类(例如保险应用程序)开始,没有花任何时间考虑如何将事情分解成可管理的块。随着时间的推移,随着功能的增加,我们会添加更多的映射(费率、客户机、地址等),然后花费在保存和加载保险对象及其连接的所有内容上的时间会增加。特别是当您接近上线日期时,使用每个表中的大量数据进行的性能测试开始证明它太慢了。

    显然,我们有很多方法可以尝试进行分区,例如,只映射客户机CRUD屏幕的客户机类等,这比在开发周期结束时尝试使用它要好得多。

    我只是想知道是否有关于处理/缓解这一问题的建议。

    4 回复  |  直到 16 年前
        1
  •  0
  •   xanadont    16 年前

    Java有这个端口吗? http://fluentnhibernate.org/ 它会让你的生活更轻松,速度更快,还有很多其他的好处。

    另外,简单地用硬件解决问题通常要便宜得多。如果事情进展太慢,花100美元或1000美元在硬件上是值得的,而不是开始一个漫长的(读:昂贵的)重新设计工作。

        2
  •  0
  •   Peter B    16 年前

    如果您没有利用Hibernate的懒惰关联,这可能是一个开始。转换可能是一个挑战,因为您将发现,在没有打开会话的情况下,有多少代码假定整个图形都已加载。在这种情况下,你需要 this pattern

        3
  •  0
  •   Todd Stout    16 年前

    这类问题很快就会演变成一场丑陋的宗教辩论。已经讨论了ORMs的许多缺点 here

        4
  •  0
  •   Manuel Darveau    15 年前

    一些技巧:

    • 不要急着抓人。如果您使用的是注解,您应该确保每个*ToMany注解都是惰性的(fetch=…lazy)。急于求成是邪恶的。如果出于某种原因,您真的需要快速获取,您可以在查询中指定它。

    • 不要在单个事务中加载太多对象。假设您有一个将处理大量实体(>1000)的事务。您应该使用一些分页并处理它自己事务中的每个页面。在单个事务中加载大量对象会加载会话,性能会降低。或者,您可以逐出不再使用的对象,但如果加载了对象图,这可能会很棘手。