Hibernate EntityManagerImpl: получение или настройка доступа к нему - PullRequest
0 голосов
/ 11 октября 2011

Мы разрабатываем приложение Java EE, используя Hibernate в качестве поставщика JPA.Теперь мы хотим использовать критерии Hibernate, но для этого мне нужно получить доступ к HibernateEntityManagerImpl.

У нас это есть в нашем componentContext.xml

  <context:component-scan base-package="com.volvo.it.lsm"/>

<!-- JPA EntityManagerFactory -->
<bean id="EmployeeDomainEntityManagerFactory" parent="hibernateEntityManagerFactory"      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="EmployeeDomainPU" /> 
</bean>

и в наших классах:

@PersistenceContext(unitName = "EmployeeDomainPU")
public void setEntityManager(EntityManager em) {
    this.em = em;
}

Спасибо!

Ответы [ 3 ]

2 голосов
/ 11 октября 2011
EntityManager em ...

//if you want Session with JPA 1.0
org.hibernate.Session session = (org.hibernate.Session) em.getDelegate();

//If you use JPA 2.0 this is preferred way
org.hibernate.Session session2 = em.unwrap(org.hibernate.Session.class);

//if you really want Hibernates implementation of EntityManager, just cast
//it (this is not needed for Criteria queries though). Actual implementing class
//is of course Hibernates business and it can vary
org.hibernate.ejb.EntityManagerImpl emi = 
 (org.hibernate.ejb.EntityManagerImpl) em;
1 голос
/ 11 октября 2011

Используйте этот код:

Session session = (Session) entityManager.getDelegate();
session.createCriteria(...);

Обратите внимание, что у JPA2 также есть (другой) Criteria API.Использовать IMHO сложнее, но он более безопасен для типов и обладает теми же преимуществами, что и Hibernate Criteria API (возможность динамически составлять запрос)

0 голосов
/ 11 октября 2011

Вы можете вызвать em.getDelegate () и привести его к классу Hibernate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...