簡體   English   中英

HIbernate實體管理器:如何緩存查詢?

[英]HIbernate Entity Manager: How to cache queries?

我使用Hibernate 3.5.1和EntityManager進行數據持久化(使用JPA 2.0和EHCache 1.5)。 我可以通過以下代碼獲取查詢:

EntityManager em;
...
Query query = em.createQuery(...);
...

現在,問題是EntityManager的createQuery()方法返回javax.persistence.Query,與org.hibernate.Query(由SessionFactory的createQuery()方法返回)不同,它沒有org.hibernate.Query.setCacheable()方法。

那么,我應該如何使用EntityManager(或Hibernate的其他部分)緩存查詢?

如果要使用特定於供應商的擴展,可以使用unwrap方法來獲取供應商實現。 例如,

org.hibernate.Query hquery = query.unwrap(org.hibernate.Query.class);

然后,您可以使用供應商特定的界面。 或者,您可以在創建查詢之前將EntityManager解包到Session

如果你不想在你的代碼中有任何hibernate導入,你也可以這樣做

query.setHint("org.hibernate.cacheable", Boolean.TRUE);

真的取決於你,你寧願引入供應商依賴。

我傾向於第一個,因為如果從你的依賴項中刪除hibernate會發出一個大紅色,它會失敗,因為它會發生變化,“嘿,你的開發人員改變這個,這里有供應商依賴。” 如果提供者不理解提示,那么提示就什么都不做。

其他人寧願容忍代碼中依賴於供應商的魔術字符串而不是需要編譯時供應商依賴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM