![]() |
1
5
更新: 请看我的相关问题 here . 底线是,尝试使用fetch=“select”避免与已经在二级缓存中的对象连接。 我以前的回答(可能仍然有用) 查询缓存缓存从查询返回的标识符,而不是实际对象 要正确使用它,你应该
为了澄清4,如果两个不同的事务使用精确的参数运行精确的(缓存的)查询并返回完全相同的对象,但它不在二级缓存中,则仍然会发生数据库命中以获取实际的对象(可能是一个选择)。中) 查询缓存有两种用途——避免在同一事务中对非缓存项的HQL查询重新访问数据库,并允许将二级缓存对象用于HQL查询(自动用于LOAD或GET命令) 希望它能清除森林… |
![]() |
2
1
我不知道nhibernate,但是在hibernate中,必须为查询使用提示显式启用查询缓存。二级缓存可以自动缓存单个对象,但对于查询,它需要明确的方向。 |
![]() |
3
0
不是真正的答案,而是提示…集合和查询缓存都没有真正存储结果。它们只存储结果实体的标识符。实体/类缓存将存储实体的数据。 因此,考虑一下——如果一个查询返回多个实体类型(即热切加载),那么它就不能合理地存储一个ID数组,因为实体之间存在关系。我相信缓存本身是非常简单的结构。 我不确定“值”查询——即使用投影而不是类的查询。我想说你不能把这些存起来。但我可能错了。 现在,尽管这可能对你的问题没有帮助,但还有其他的技术可以帮助你。即批量加载和适当的实体缓存。我会小心收集缓存。我被他们咬了好几次。 希望这有帮助(至少一点)。 |
![]() |
Nico Pizzo · 子查询上的nhibernate联接 7 年前 |
![]() |
YMC · 无法在Nhb 4中构建只有特定字段可供选择的2个表联接 7 年前 |
![]() |
Stu · 具有特定类型的字符串外键的NHibernate映射 7 年前 |
![]() |
Zout · 为Hibernate的HiLo算法管理的列生成ID 7 年前 |