java - 如果 Hibernate 查询缓存仅用作 JPA 提供程序,它是否有任何影响?

标签 java hibernate jpa caching

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/

相关文章:

java - 我如何知道 Java EE 应用程序何时被取消部署?

java - 打印 JUnit 测试的输出

Java:打开带有 IP 的 URL

java - JPA 从实体中的集合中获取值

java - JPA/Eclipse链接 : Understanding ClassLoader issues

java - 正则表达式选择特定字符串前面的字符串

java - 我需要在 Hibernate 中手动创建关系表吗?

java - 嵌入式类和双向关系

Spring 和 hibernate : No Session found for current thread

java - 如何在 GreaterThan Spring JPA 中使用 OrderBy