如果仅将Hibernate查询缓存用作JPA提供程序,它是否会产生任何影响?

时间:2018-02-10 18:52:36

标签: java hibernate jpa caching

Hibernate提供了为查询和L2缓存选择不同的缓存提供程序,但似乎没有明确的声明,如果Hibernate仅用作普通JPA提供程序,即通过使用EntityManager运行查询,这是否会产生影响Session。所有介绍都只是简单介绍Hibernate,Hibernate是Hibernate特有的Hibernate,还是Hibernate作为JPA提供者,然后提供涉及Hibernate的代码示例 - 宣传使用或因为它是必需的?

如果重要,我指的是Java EE环境。

1 个答案:

答案 0 :(得分:0)

使用缓存提供程序只是配置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,那么您将成功地session包裹EntityManager,并且可以直接使用它。