繁体   English   中英

如何使用条件或查询使用第一级缓存? (休眠)

[英]How to use first level cache using criteria or query ? (Hibernate)

我有一个表(User)包含很多列,username是其中一列。 此用户名列包含用户名值,如'Sachin','Sameer','Krunal'等。

我的问题如下:我在User表的用户名列中使用autoComplete作为搜索用户名。 当我在autoComplete中写'S'时,我的结果应该在List中,这个List包含'Sachin'和'Sameer'用户名,并希望存储在缓存中,当我在自动完成时再次写'S'时,我想得到的结果来自缓存并且不希望调用相同的查询来从User表中获取数据。 我也使用标准也使用hql,但没有从缓存中获得结果。

那么我怎样才能得到这个结果呢?

请指导我

Hibernate默认启用第一级缓存。 此缓存的范围是会话范围。 会话关闭时,将清除关联的缓存。 第一次在会话中请求实体时,Hibernate将查询数据库。 如果你再次请求进入同一个会话 ,Hibernate将从一级缓存中获取它。

在您的情况下,您需要二级缓存和查询缓存。 在二级缓存中,实体超出会话范围。 因此,即使在关闭会话之后,缓存也会保留实体。 在查询缓存中,实体PK也存储在会话范围之外。

查询缓存将返回用于从二级缓存中获取实体的PK。

在您的用例中, 您不能使用标准或查询来使用第一级缓存。

一级缓存的上下文:

每当我们通过pk操作插入\\ update \\ delete \\ select时 ,相应的持久性对象将自动放置在会话缓存中。

操作:

session.save()

了Session.update()

使用Session.delete()

session.load()

另外在二级缓存的上下文中:

每当我们执行hibernate查询(如HQL,QBC,Select * ..语句)时,select语句返回的所有记录都将放在查询缓存中

如此好的启用二级缓存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM