我有多个表,我必须加入,子查询,分页,分组,排序。记住hibernate限制,有时需要本机SQL,在此期间,hibernate缓存无能为力。此外,数据存储在休眠中,二级缓存不是自动的,因为它仅在访问DB时存储。所以第一次二级缓存是空的。
我的问题是我使用本机sql来获取具有多个连接和分组,排序的数据,最终导致性能问题。
我的想法:我喜欢sql VIEW 来提取所有这些连接,排序,分组的数据。但是sql VIEW就像一个普通的select语句,每次访问时都会执行。是否有任何实时结果集作为表格,我可以在选择*从ONE_LIVE_RESULT_SET条件中获取数据。 有没有像LIVE_RESULT_SET IN sql world这样的概念?任何评论。
答案 0 :(得分:1)
使用物化视图
来自维基百科的摘录:http://en.wikipedia.org/wiki/Materialized_view
物化视图是包含结果的数据库对象 一个问题。例如,它可能是远程数据的本地副本, 或者可以是表或联接的行和/或列的子集 结果,或者可以是基于表数据聚合的摘要。 物化视图也可以存储基于远程表的数据 称为快照。可以将快照重新定义为具体化 图。
在Oracle中创建实例化视图的示例语法:
创建物化视图MV_MY_VIEW刷新快速开始与SYSDATE
NEXT SYSDATE + 1 AS SELECT * FROM;
此致
答案 1 :(得分:0)
但是这个MATERIALIZED VIEW不是实时数据(与表同步),但为了使其成为实时数据,它必须是REFRESH。这里的问题是什么时候再刷新或在这种刷新期间再次需要等待。频繁的数据更改也是另一个受损的用例。是否有任何方法可以针对特定行进行刷新?
答案 2 :(得分:0)
任何休眠专家! HIBERNATE是否将数据保留在多个连接,复杂连接上? 我已经看到 hibernate持久化二级缓存session.get(id ),但我不确定具有多个/复杂连接的hql或本机sql 。是否有可能从hibernate二级缓存中获取多个/ comples连接?