gpt4 book ai didi

java - HIbernate 实体管理器 : How to cache queries?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:22 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com