3
我想緩存這樣的查詢:休眠的EntityManager +查詢緩存 - 「連接抓取」不工作
TypedQuery<Foo> q = em.createQuery(
"SELECT foo FROM Foo foo " +
"INNER JOIN FETCH Foo.bar "
);
q.setHint("org.hibernate.cacheable", true);
的問題是,FETCH
似乎沒有任何效果當緩存命中,即集合Foo.bar不會被初始化。我可以遍歷結果列表並初始化集合的所有實例,但這會使整個事情比首先不使用查詢緩存更慢。
我使用帶有Infinispan作爲緩存引擎的JBoss AS 6.0/Hibernate 3.6。
奇怪的是,根據我通過JMX控制檯獲得的緩存統計信息,Foo.bar中的對象似乎被緩存,但這些對象的緩存沒有得到任何匹配。
謝謝,似乎我仍然需要迭代結果列表並初始化集合,儘管它們現在從緩存而不是數據庫加載。並不能真正解決我的問題,因爲在我的真實世界的應用程序中,我有一個相對複雜的對象圖,我必須部分獲取並遍歷所有集合,其中一些集合本身也具有我需要獲取的依賴關係,吃帶走我可能從緩存中獲得的任何性能優勢。 – chris 2011-04-28 11:03:10
@chris:也許你應該試着看看一個EntityGraph是否可以滿足你的需求。 – willome 2016-08-29 13:34:50