持久化集合是一个特性!

发布    |      

在过去的几个月里,我有一种感觉,我们关于对象/关系映射的解释有点问题。我仍然不确定这是任何文档或演示幻灯片的错误,只是自然而然发生的事情...

在我看来,Hibernate(以及其他许多类似工具)的许多许多用户似乎认为他们绝对必须映射一个集合。基本上,许多开发者,特别是如果他们没有接触过一些数据管理基础知识,仅仅依靠纯 面向对象 的世界观生存,似乎认为持久化集合是绝对必需的。有时当我解释如何编写一个复杂而完整的Hibernate应用程序,而不需要映射任何集合时,这确实是个惊喜!

如果你刚开始学习Hibernate,这一点尤为重要;正确映射集合绝对是学习曲线中的最大一步。我想澄清一些关于集合映射的困惑(实际原因是一个想在Hibernate注释网站上声明 不可用 的人,因为当前的Beta版本不允许你通过连接表映射实体的映射...)映射实体...

每次你认为你必须映射一个集合时,你必须问自己 /为什么/。映射的持久化集合是一个 /特性/,而不是一个要求。这个特性给你什么

  • 你不再需要通过查询检索你正在寻找的数据,你只需遍历一个集合即可。当然,这种迭代始终可以,没有例外,用查询来代替。
  • 你不再需要手动维护两个数据片段之间的关系(请,别再称之为 关系)。例如,你只需将一个 对象放入一个 对象的集合中(我真的很讨厌这个解释,但它是个方便的谎言),然后自动保存。当然,这种级联持久性始终可以,没有例外,用显式调用持久性管理器来代替。
  • 对象/关系映射软件可以在您访问集合时进行优化,例如批量获取或仅在调用时才执行的延迟行为size()。这些优点可能会让您的日子更轻松,但它们始终可以被查询替代。实际上,这在概念上是正确的,但在Hibernate 3.1中批量获取和子选择集合获取不起作用——这些功能的添加已列入API查询的清单。

因此,如果您想使用这些功能之一,则应映射集合。如果这些功能对您没有优势,则不要映射它!换句话说:关系数据库具有外键(键和约束的副本,以保持其整体性)以及没有其他内容。所有外键关系都可以用Java中的多对一关联表示。其余的都是糖,是特性,是便利性。是的,您通常需要这种便利性,并且您有权利期望从对象/关系映射软件中获得它。但您不必强制进行集合映射,尤其是如果您不知道如何正确进行,或者您真正从它中获得什么。


返回顶部