作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 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,它将失败并出现异常,并发出一个大红色“嘿,开发人员正在更改它,这里存在供应商依赖项。”而如果提供者不理解提示,则提示什么也不做。
其他人宁愿容忍代码中有供应商依赖的魔法字符串,也不愿在编译时依赖供应商。
关于java - HIbernate 实体管理器 : How to cache queries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3569996/
我是一名优秀的程序员,十分优秀!