当前位置: 首页 > 面试题库 >

使用EntityManager从EJB访问Hibernate会话

祝锐
2023-03-14
问题内容

是否可以从EntityManager中获取Hibernate Session对象?我想访问一些hibernate特定的API …

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

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

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

我用玻璃鱼3.0.1


问题答案:

Bozho和partenon是正确的,但是:

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

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

我认为您的异常是由于您试图转换为实现类(也许您正在处理JDK代理)而引起的。强制转换为接口,一切都应该正常(在JPA 2版本中,不需要强制转换)。



 类似资料:
  • 我正在从事一个使用Hibernate4.1、Spring3.1和JPA2.0的项目,我想验证我从互联网上收集到的信息是否正确。 我正在尝试决定是使用JPA entityManager还是特定于hibernate的sessionFactory。 起初,我计划使用entityManager和完整的JPA规范,因此我的项目将与Hibernate脱钩,如果这种想法吸引了我,或者后来有什么东西说服了我,我可

  • 问题内容: 构造bean之后,我想使用EntityManager从数据库中检索数据。在构造函数中是不可能的,因为EntityManager是在调用构造函数之后注入的。所以我试图用@PostConstruct注释的方法来做。根据API,在完成所有注入后将调用PostConstruct方法。执行查询是可行的,但是它总是返回一个空列表。如果我在其他方法中使用相同的查询,它将返回正确的结果。有人知道,为什

  • 19.2. 访问EJB 19.2.1. 概念 为了调用一个本地或者远程无状态session bean上的方法,通常客户端的代码必须进行JNDI查找,获取(本地或远程的)EJB Home对象,然后调用该对象的"create"方法,才能得到实际的(本地或远程的)EJB对象。如此一来,调用的方法比调用EJB组件本身的方法还要多。 为了避免重复的底层代码,很多EJB应用使用了服务定位器(Service L

  • 我试图更新一个项目与Spring和Hibernate与春靴。 看起来一切正常,但我不知道如何获得entityManager。 我没有使用spring数据,所以没有使用域或存储库。 在这个项目中,服务用@service注释,entityManager用@PersistenceContext自动连接, 这是我服务的一个例子 这里的问题是entityManager为空。所以我在文档中读到,如果我们想管理

  • Hibernate EntityManager实现了EJB3.0 JPA规范。Hibernate Java Persistence provider通过了Sun TCK测试和完全认证,你可以在Java SE 5.0,或Java EE 5.0以上的任何环境里使用Hibernate Java Persistence provider。 Hibernate是一个非常优秀的持久层ORM(Object/Re

  • 我有一个由LDAP领域支持的工作安全域,如下所示: 授权是针对从LDAP属性映射中提取的标识属性“roles”进行的。 现在,这个方法已经成功了,我想从LDAP中获取更多的属性(company、firstName、lastName、email,可能还有更多)。上面的配置已经拾取了这些内容,而Elytron以我所期望的方式处理它们: 所以.总结一下。不管这是一个LDAP领域。我需要的属性在Ident