Injection Hibernate Session and SessionFactory

JBoss EJB 3.0では@PersistenceContextにEntityManagerだけではなくHibernateのSessionも注入できます。JBossだからなせるワザ。

import org.hibernate.Session;
import org.hibernate.SessionFactory;

@Stateful public class MyStatefulBean ... {
   @PersistenceContext(unitName="crm") Session session1;
   @PersistenceContext(unitName="crm2", type=EXTENDED) Session extendedpc;
   @PersistenceUnit(unitName="crm") SessionFactory factory;
         
}

EntityManagerからHibernate Sessionを取り出すことも可能です。だって、Hibernate EntityManagerはSessionのラッパーですから。

@PersistenceContext EntityManager entityManager;
public void someMethod();
{
   org.jboss.ejb3.entity.HibernateSession hs = (HibernateSession)entityManager;
   org.hibernate.Session session = hs.getHibernateSession();
}