2017-03-02 67 views
0

是有可能manully添加键的Hibernate查询缓存的地图吗?是否有可能为Hibernate查询缓存映射手动添加值?

请参考下面我的推理:

我有一个查询,如下所示:

from UserTable as u where u.username="Dan" and password="123456" 

而结果查询返回用户提供的3

ID的第一查询只执行一次,并加载到查询缓存中。

现在,在第一个结果被缓存,我发出以下查询

from UserTable as u where u.id=3 

将返回相同的用户,但我从不同的网站,like so了解到,查询将被视为不同的查询完全由缓存(如果我错了,请纠正我的错误)。

有没有办法告诉Hibernate,这两个查询返回相同的数据?这样做可以节省休眠时间,避免第二次点击数据库。

的理论解决方案,我能想到的是,issuning第一个查询后,注入与第一查询值到高速缓存中的第二个查询,但我不知道这是可能的。

回答

2

有没有办法告诉Hibernate,这两个查询返回相同的数据? 编号

这样做可以节省休眠时间,从而第二次启动数据库。 它不应该是一个大问题。查询缓存旨在用于经常执行的查询,因此一个执行更多不应该产生很大的差异。

我能想到的理论解决方案是,在发出第一个查询之后,将第二个查询与第一个查询值一起注入缓存,但我不确定这是可能的。 理论上是可以的,但它是非常复杂的手工实现(缓存条目格式,时间戳缓存,与其他并发会话正确同步,等等)。

具体示例的解决方案是启用UserTable实体的二级缓存,并使用session.load(UserTable.class, id)加载用户而不是执行第二个查询。这样,用户将从L2高速缓存中检索,因为它在第一个查询中被加载到L2高速缓存中。

重要:如果你有大量的UserTable实体的记录,无论你的任何疑问,也没有实体UserTable应缓存。请查看blog,了解有关L2缓存的概述和最佳实践。

相关问题