澄清术语——“水化”JPA 或 Hibernate 实体在从数据库中获取实体时意味着什么

新手上路,请多包涵

在实体的 ORM / 延迟加载的上下文中,我对术语“Hydration”的理解如下:

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

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

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

最初,未填充 books 集合。

据我了解,从数据库加载 books 集合的过程称为“Hydrating”集合。

这个定义是否正确,“共同点”一词是否正确?我应该为这个过程使用另一个更常见的术语吗?

原文由 Marty Pitt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 459
2 个回答

Hydrate 最初是一个术语,用于从数据库(特别是在 Hibernate 中)填充实例化(但为空)的值对象/模型。

BizTalk 等各种其他 ORM 和工具使用 Hydrate 和其他相关术语(例如,BizTalk 使用术语 Dehydrated 表示实例可用但尚未填充。)

就我个人而言,我反对冗余的术语大修, 填充 意味着同样的事情,而无需重新发明语言。它没有增加任何内容并导致混淆(遇到重新发明的术语时通常首先想到的是: 这是不是有点不同和神奇? )。

这种语言风格的 BizTalk 扩展,特别是 Dehydrated 是多余的。我想人们还没有忘记怎么说, empty ,还是 clear

Hydrated 及其相关隐喻本质上是营销工具,发明它们是为了将 Hibernate 与竞争产品区分开来。

在这一点上,Hibernate 和其他 ORM 产品多年来一直使用这些术语,因此 Hydrate(和 Dehydrate)将保留下来。

原文由 ocodo 发布,翻译遵循 CC BY-SA 3.0 许可协议

实体加载状态

当您获取实体时,Hibernate 将尝试从二级缓存或数据库中加载它。

实体加载状态

如果实体未存储在二级缓存中,则执行查询并将 JDBC ResultSet 转换为 Object[] 包含加载时实体属性值。

二级缓存在缓存实体时存储这个 Object[] 。因此,当从数据库或二级缓存加载实体时,您将获得 Object[] 实体属性值数组。

Object[] 加载状态转换为 Java 实体对象的过程称为 hydration ,如下所示:

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

加载状态作为 EntityEntry 对象保存在当前运行的 Persistence Context 中,稍后将用于默认脏检查机制,该机制将当前实体数据与加载时快照进行比较。

加载状态也用作二级实体缓存的缓存条目值。

The inverse operation of transforming the entity to an Object[] that’s used when binding SQL parameter values for INSERT , UPDATE or DELETE statements is called 脱水

原文由 Vlad Mihalcea 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题