使用 EntityManager 从 EJB 访问休眠会话

2022-09-02 19:28:24

是否可以从 EntityManager 获取休眠会话对象?我想访问一些休眠特定的API...

我已经尝试过类似的东西:

org.hibernate.Session hSession =
   ( (EntityManagerImpl) em.getDelegate() ).getSession();

但是,一旦我在 EJB 中调用一个方法,我就会得到“在 EJB 上调用期间发生了系统异常”,并带有 NullPointerException

我用玻璃鱼 3.0.1


答案 1

Bozhopartenon是正确的,但是:

在 JPA 2 中,首选机制是 entityManager.unwrap(class)

HibernateEntityManager hem = em.unwrap(HibernateEntityManager.class);
Session session = hem.getSession();

我认为您的异常是由于您尝试转换为实现类(也许您正在处理JDK代理)而导致的。Cast到一个接口,一切都应该没问题(在JPA 2版本中,不需要cast)。


答案 2

从Hibernate EntityManager文档来看,首选的方法是:

Session session = entityManager.unwrap(Session.class);

推荐