繁体   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