我有一个表(User),其中包含很多列,username是其中一列。此用户名列包含用户名值,例如' Sachin',' Sameer'' Krunal'等。
我的问题如下: 我在User表的用户名列中使用autoComplete作为搜索用户名。当我写' S'在autoComplete中,我的结果应该在List中,此列表包含' Sachin'和#Sameer'用户名,并希望存储在缓存中,当我再次写入' S' S'在自动完成中,所以我想从缓存中获取结果,并且不想调用相同的查询来从User表中获取数据。我使用的标准也使用了hql但没有从缓存中获得结果。
那我怎么能得到这个结果呢?
请指导我
答案 0 :(得分:1)
在您的用例中,您不能使用条件或查询来使用一级缓存。
一级缓存的上下文:
每当我们执行插入\更新\删除\ 通过pk选择操作时,相应的持久性对象将自动放置在会话缓存中。
操作:
session.save()
session.update()
session.delete()
session.load()
也在二级缓存的上下文中:
无论何时执行休眠查询(例如HQL,QBC,Select * ..语句),则select语句返回的所有记录都将放置在查询缓存中。
启用二级缓存非常好。
答案 1 :(得分:0)
Hibernate默认启用第一级缓存。此缓存的范围是会话范围。会话关闭时,将清除关联的缓存。第一次在会话中请求实体时,Hibernate将查询数据库。如果您再次请求同一会话,Hibernate将从第一级缓存中获取它。
在您的情况下,您需要二级缓存和查询缓存。在二级缓存中,实体超出会话范围。因此,即使在关闭会话之后,缓存也会保留实体。在查询缓存中,实体PK也存储在会话范围之外。
查询缓存将返回用于从二级缓存中获取实体的PK。