澄清术语:“保湿”实体:从数据库获取属性

在实体的ORM /惰性加载的情况下,我对“水合”一词的理解如下:

“保湿”描述了填充使用延迟加载获取的实体的一些或全部先前未填充的属性的过程。

例如:class Author从数据库加载:

 @Entity class Author { @Id long id; List<Book> books; } 

最初, bookscollections不填充。

我的理解是,从数据库加载books集合的过程被称为“保湿”集合。

这个定义是否正确,是常用的术语? 在这个过程中还有另一个更常见的术语吗?

水合物开始作为一个术语来填充一个实例化(但是是空的)值对象/模型从一个数据库,特别是在Hibernate。

其他各种ORM和工具如BizTalk现在使用Hydrate和其他相关术语(例如,BizTalk使用术语“脱水”表示实例可用,但尚未填充)。

就我个人而言,我反对冗余的术语, 填充意味着完全相同的东西,没有毫无意义的隐喻性语言,除了混淆之外什么都没有增加。

这种风格的语言,特别是脱水的BizTalk扩展是完全多余的。 有人真的忘了怎么说, 空了吗?

水合及其相关的冗余隐喻收集只是纯粹的营销毛病; 他们真的没有地方作为技术术语。 不幸的是,Hibernate和其他使用这些术语的工具在开发世界中已经深入人心,所以水合物和其他工具都在这里停留。

水合是一个松散的术语。 在我们公司,我们在他的术语中使用“补液”来加载整个对象图的所有对象属性。 这里有一篇文章讨论各种水平的水分(这也是一个普遍的用法,虽然他们正在使用冬眠)。

我认为ORM上下文中的“hydrate(s)”这个词只是意味着框架给了你对象。 所以当数据从商店里被抽出后,这些对象被ORM'水合'了。 这个术语可以在任何时候应用ORM框架给你一个在商店中表示的对象/graphics。

在Hibernate命名法中, 水合作用是将JDBC ResultSet转换为原始数组的数组 :

 final Object[] values = persister.hydrate( rs, id, object, rootPersister, cols, eagerPropertyFetch, session ); final Object[] values = persister.hydrate( rs, id, object, rootPersister, cols, eagerPropertyFetch, session ); 

水化状态作为[EntityEntry] [3]对象保存在当前运行的持久性上下文中,该对象封装了加载时实体快照。 水合状态然后被使用:

  • 默认的脏检查机制,它将当前实体数据与加载时间快照进行比较
  • 二级caching,其caching条目是从加载时间实体快照构build的

逆操作称为脱水 ,它将实体状态复制到SQL INSERT或UPDATE语句中。

术语hydration被广泛用于hibernate库的内容来指代设置最近加载的对象的字段的过程,并且确实与对象graphics大众化有关。
但与延迟加载的概念不同,即给用户一个半满的对象,并让其余的按需加载。
水化总是执行,懒惰或热切,它是冬眠的东西。
延迟加载只是为了方便

用你select的orm的名字replacehibernate