Hello there,
I use glassfish and just wanna do hibernate's criteria search.
But I only get
Code:
final org.eclipse.persistence.sessions.Session session = ((org.eclipse.persistence.internal.jpa.EntityManagerImpl) em.getDelegate()).getSession();
instead of
Code:
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
How can I inject the hibernate implementation?
my Service class
Code:
package de.familienschaetze.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Projections;
import de.familienschaetze.entities.EntityWithId;
public class GenericDaoImpl<T extends EntityWithId, ID extends Serializable> implements GenericDao<T, ID> {
@PersistenceContext
protected EntityManager em;
protected List<T> findByCriteria(final Criterion... criterion) {
// JBOSS verwendet (Session) em.getDelegate()
// aeltere Glassfish verwendet org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
final org.eclipse.persistence.sessions.Session session = ((org.eclipse.persistence.internal.jpa.EntityManagerImpl) em.getDelegate()).getSession();
final Criteria crit = session.createCriteria(getEntityClass());
return result;
}
hibernate versions I use:
Code:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.8.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>3.3.0.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.8.Final</version>
</dependency>
my persistence.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="myunit">
<jta-data-source>jdbc/mysql</jta-data-source>
<properties>
<!-- property name="hibernate.hbm2ddl.auto" value="create"/ --><!-- (validate, update, create, create-drop) -->
<!-- property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/ -->
<!-- property name="toplink.jdbc.user" value="admin"/-->
<!-- property name="toplink.jdbc.password" value="duke"/-->
<!-- property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" /-->
<!-- property name="toplink.platform.class.name" value="oracle.toplink.essentials.platform.database.DerbyPlatform"/-->
<property name="hibernate.show.sql" value="true" />
<!-- ### toplink Schema Generation ### -->
<property name="toplink.ddl-generation" value="update-tables"/><!-- none(default), create-tables, drop-and-create-tables, update-tables -->
<property name="toplink.application-location" value="."/>
<property name="toplink.create-ddl-jdbc-file-name" value="create.sql"/>
<property name="toplink.drop-ddl-jdbc-file-name" value="drop.sql"/>
<property name="toplink.ddl-generation.output-mode" value="sql-script"/><!-- sql-script, database, both -->
</properties>
</persistence-unit>
</persistence>
thanks alot for help.
Your houk
ps. : The following hint doesnt work for me (but perhaps other guys with same problem):
http://stackoverflow.com/questions/4335570/accessing-hibernate-session-from-ejb-using-entitymanagerIll get the Exception:
Caused by: javax.persistence.PersistenceException: Provider-does-not-support-the-call (There is no English translation for this message.)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.unwrap(EntityManagerImpl.java:2504)