[英]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.