@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2012 the original author or authors .
* Copyright 2002 - 2013 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -18,7 +18,6 @@ package org.springframework.orm.jpa.vendor;
@@ -18,7 +18,6 @@ package org.springframework.orm.jpa.vendor;
import java.util.HashMap ;
import java.util.Map ;
import javax.persistence.EntityManager ;
import javax.persistence.EntityManagerFactory ;
import javax.persistence.spi.PersistenceProvider ;
@ -36,27 +35,64 @@ import org.hibernate.dialect.SQLServerDialect;
@@ -36,27 +35,64 @@ import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.ejb.HibernateEntityManager ;
import org.hibernate.ejb.HibernateEntityManagerFactory ;
import org.hibernate.ejb.HibernatePersistence ;
import org.springframework.orm.jpa.JpaDialect ;
/ * *
* { @link org . springframework . orm . jpa . JpaVendorAdapter } implementation for
* Hibernate EntityManager . Developed and tested against Hibernate 3 . 6 and 4 . 2 .
* Hibernate EntityManager . Developed and tested against Hibernate 3 . 6 and 4 . 2 / 4 . 3 .
*
* < p > Exposes Hibernate ' s persistence provider and EntityManager extension interface ,
* and supports { @link AbstractJpaVendorAdapter } ' s common configuration settings .
*
* < p > Note that the package location of Hibernate ' s JPA support changed from 4 . 2 to 4 . 3 :
* from { @code org . hibernate . ejb . HibernateEntityManager ( Factory ) } to
* { @code org . hibernate . jpa . HibernateEntityManager ( Factory ) } . As of Spring 4 . 0 ,
* we ' re exposing the correct , non - deprecated variant depending on the Hibernate
* version encountered at runtime , in order to avoid deprecation log entries .
*
* @author Juergen Hoeller
* @author Rod Johnson
* @since 2 . 0
* @see org . hibernate . ejb . HibernatePersistence
* @see org . hibernate . ejb . HibernateEntityManager
* /
public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {
private final PersistenceProvider persistenceProvider = new HibernatePersistence ( ) ;
private final PersistenceProvider persistenceProvider ;
private final JpaDialect jpaDialect = new HibernateJpaDialect ( ) ;
private final Class < ? extends EntityManagerFactory > entityManagerFactoryInterface ;
private final Class < ? extends EntityManager > entityManagerInterface ;
@SuppressWarnings ( { "deprecation" , "unchecked" } )
public HibernateJpaVendorAdapter ( ) {
PersistenceProvider providerToUse ;
Class < ? extends EntityManagerFactory > emfIfcToUse ;
Class < ? extends EntityManager > emIfcToUse ;
try {
// Try Hibernate 4.3's org.hibernate.jpa package in order to avoid deprecation warnings
ClassLoader cl = HibernateJpaVendorAdapter . class . getClassLoader ( ) ;
Class < ? > hibernatePersistenceProviderClass = cl . loadClass ( "org.hibernate.jpa.HibernatePersistenceProvider" ) ;
providerToUse = ( PersistenceProvider ) hibernatePersistenceProviderClass . newInstance ( ) ;
emfIfcToUse = ( Class < ? extends EntityManagerFactory > ) cl . loadClass ( "org.hibernate.jpa.HibernateEntityManagerFactory" ) ;
emIfcToUse = ( Class < ? extends EntityManager > ) cl . loadClass ( "org.hibernate.jpa.HibernateEntityManager" ) ;
}
catch ( ClassNotFoundException ex ) {
// Fall back to Hibernate 3.6-4.2 org.hibernate.ejb package
providerToUse = new HibernatePersistence ( ) ;
emfIfcToUse = HibernateEntityManagerFactory . class ;
emIfcToUse = HibernateEntityManager . class ;
}
catch ( Exception ex ) {
throw new IllegalStateException ( "Found HibernatePersistenceProvider but could not instantiate it" , ex ) ;
}
this . persistenceProvider = providerToUse ;
this . entityManagerFactoryInterface = emfIfcToUse ;
this . entityManagerInterface = emIfcToUse ;
}
@Override
public PersistenceProvider getPersistenceProvider ( ) {
@ -101,15 +137,15 @@ public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {
@@ -101,15 +137,15 @@ public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {
protected Class < ? > determineDatabaseDialectClass ( Database database ) {
switch ( database ) {
case DB2 : return DB2Dialect . class ;
case DERBY : return DerbyDialect . class ;
case DERBY : return DerbyDialect . class ; // DerbyDialect deprecated in 4.x
case H2 : return H2Dialect . class ;
case HSQL : return HSQLDialect . class ;
case INFORMIX : return InformixDialect . class ;
case MYSQL : return MySQLDialect . class ;
case ORACLE : return Oracle9iDialect . class ;
case POSTGRESQL : return PostgreSQLDialect . class ;
case POSTGRESQL : return PostgreSQLDialect . class ; // PostgreSQLDialect deprecated in 4.x
case SQL_SERVER : return SQLServerDialect . class ;
case SYBASE : return org . hibernate . dialect . SybaseDialect . class ;
case SYBASE : return org . hibernate . dialect . SybaseDialect . class ; // SybaseDialect deprecated in 3.6 but not 4.x
default : return null ;
}
}
@ -121,12 +157,12 @@ public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {
@@ -121,12 +157,12 @@ public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {
@Override
public Class < ? extends EntityManagerFactory > getEntityManagerFactoryInterface ( ) {
return HibernateEntityManagerFactory . class ;
return this . entityManagerFactoryInterface ;
}
@Override
public Class < ? extends EntityManager > getEntityManagerInterface ( ) {
return HibernateEntityManager . class ;
return this . entityManagerInterface ;
}
}