我想知道加载和获取如何使用第一级缓存。
如果我在同一个会话中有一个select查询,首先使用getmethod进行检索,然后使用load方法。第二个加载方法是使用查询缓存还是会在检索属性时进行新查询?
答案 0 :(得分:3)
在以下情况下主要使用缓存:
session.get
session.load
如果没有匹配,get
执行查询,load
会创建代理。
执行任何类型的查询(HQL,条件)时,查询将转换为SQL并在数据库上执行。如果在缓存中找到了结果对象,则查询将返回它们。
答案 1 :(得分:0)
我是休眠的新手。因此,为了理解hibernate缓存策略,我在get中设置了一个换行符并跟随调用堆栈。
在StatefulPersistanceContext.java文件中,有几个地图,例如entitiesByKey,充当会话级缓存。当你调用 get()时,它首先检查会话级缓存,如果它未命中,则检查第二级缓存(如果设置为用于该实体),否则它将回退到数据库。请参阅 doLoad()函数,并在DefaultLoadEventListners中调用 loadFromSessionCache(), loadFromSecondLevelCache()和 loadFromDatasource()。 java文件。
从数据库中检索行后,它还会填充会话级缓存。因此,您对 get()的后续调用将从会话级缓存本身解析。
答案 2 :(得分:0)
默认情况下启用了第一级缓存,我们不需要做任何事情来实现它,实际上我们甚至无法从那里禁用它。第一级缓存也称为会话级缓存,这意味着它仅适用于会话,如果在单个会话中执行相同的查询两次或更多次,它仅从第一个请求获取数据并提供相同的数据来自缓存的所有即将到来的类似请求
更多详情:http://www.beingjavaguys.com/2014/11/how-first-level-caching-works-in.html
答案 3 :(得分:0)
第一级缓存:它处于事务级别,默认情况下在Hibernate中启用。第一级缓存与会话相关联。如果在同一会话中多次执行相同的查询,则缓存与查询关联的数据。
http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32011