hibernate缓存保存什么?

hibernate缓存保存什么?,hibernate,caching,jdbc,Hibernate,Caching,Jdbc,你好: 我对hibernate缓存缓存的内容感到困惑 从文档中,我知道hibernate中有几种类型的缓存 第一级:事务级。 会话要持久化的实体似乎缓存在这里 二级缓存:我真的不知道这个缓存,从api来看,它说这个缓存在sessionfactory级别工作。。。我不明白 查询缓存:这对我来说很容易理解(也许我错了)。它缓存查询参数和相关实体 关于hibernate中的缓存,我只知道这些 谁能告诉我更多的细节 顺便说一句,我不擅长sql/jdbc的工作,所以我也想知道我应该如何了解sql/jdbc

你好: 我对hibernate缓存缓存的内容感到困惑

从文档中,我知道hibernate中有几种类型的缓存

第一级:事务级。 会话要持久化的实体似乎缓存在这里

二级缓存:我真的不知道这个缓存,从api来看,它说这个缓存在sessionfactory级别工作。。。我不明白

查询缓存:这对我来说很容易理解(也许我错了)。它缓存查询参数和相关实体

关于hibernate中的缓存,我只知道这些

谁能告诉我更多的细节


顺便说一句,我不擅长sql/jdbc的工作,所以我也想知道我应该如何了解sql/jdbc来了解更多关于hibernate的信息(有文档吗?)?我不想只是一个hibernate用户,因为它只是一个工具,我想要的是从这个美妙的框架中学到一些东西。:)

一级缓存

默认情况下,此缓存处于启用状态。 当NHibernate通过其唯一id从数据库加载实体时,它会自动放入所谓的标识映射中。此标识映射表示一级缓存

第一级缓存的生存期耦合到当前会话。一旦当前会话关闭,相应一级缓存的内容将被清除。一旦一个实体在一级缓存中,一个想在当前会话中加载同一实体的后续操作就会从缓存中检索该实体,而不需要往返数据库

此实体映射背后的主要原因之一是避免内存中的两个不同实例可以表示同一数据库记录(或实体)的情况

(改编自NH常见问题)

二级缓存

此缓存位于单会话作用域缓存之上。使用此缓存,您可以保存到数据库的许多往返,因为任何会话中的任何人第一次加载确定的实体时,该实体仍保留在缓存中,因此下一个请求(来自任何其他会话)将从缓存中获取该实体

要使用二级缓存,您需要缓存提供程序,如SysCache或Memcache。这些家伙将缓存实体的值存储为一个数组os字符串,由实体id散列。需要注意的是,缓存的不是.net对象,而是它的值

据说它与会话工厂绑定,因为缓存将为由确定的会话工厂创建的会话工作,所以由不同会话工厂创建的会话不会共享缓存。您是否清楚会话工厂的概念

查询缓存

这个很简单,但有一个陷阱。它将缓存查询及其参数,但不会缓存返回的实体。它将只缓存它们的Id,因此它仅在二级缓存中才有意义,因为它包含与该Id关联的值

NHiernate关于缓存的常见问题解答条目:


谢谢,你的回答很有用!!我现在有点清醒了。顺便说一句,有关于数据库的文档可以了解更多关于hibernate的信息吗?我建议您购买hibernate: