Hibernate 提供为查询和 L2 缓存选择不同的缓存提供程序,但似乎没有明确的说明如果 Hibernate 仅用作普通 JPA 提供程序(即通过使用 EntityManager
运行查询)这是否会产生影响。而不是Session
。所有介绍都只是谈到 Hibernate,这可能意味着 Hibernate 具有 Hibernate 特定功能或 Hibernate 作为 JPA 提供程序,然后提供涉及 Hibernate 的代码示例 - 是为了宣传其用途还是因为它是必需的?
如果重要的话,我指的是 Java EE 环境。
最佳答案
缓存提供程序的使用只是 Hibernate 配置的问题。 EntityManager
只是 Session
的薄包装。仅供引用,自 Hibernate 版本 5.2 Session
扩展 EntityManager
以来,请参阅 https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Session.html .
所以答案是 - 即使通过 JPA 使用,Hibernate 也会使用它们的所有功能。
编辑:
您可以通过如下代码确保 EntityManager
包装 Session
:
EntityManager em = ...; // Get EntityManager from somewhere
Session session = em.unwrap(Session.class);
如果您使用Hibernate,那么您将成功获得EntityManager
包装的session
并可以直接使用它。
关于java - 如果 Hibernate 查询缓存仅用作 JPA 提供程序,它是否有任何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48724405/