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

时间:2015-02-21 10:57:14

标签: java jquery hibernate postgresql

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

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

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

请指导我

2 个答案:

答案 0 :(得分:1)

在您的用例中,您不能使用条件或查询来使用一级缓存。

一级缓存的上下文:

每当我们执行插入\更新\删除\ 通过pk选择操作时,相应的持久性对象将自动放置在会话缓存中。

操作:

session.save()

session.update()

session.delete()

session.load()

也在二级缓存的上下文中:

无论何时执行休眠查询(例如HQL,QBC,Select * ..语句),则select语句返回的所有记录都将放置在查询缓存中。

启用二级缓存非常好。

答案 1 :(得分:0)

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

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

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