mirror of
https://github.com/querydsl/querydsl.git
synced 2026-07-06 21:05:50 +08:00
#250 improved dialect detection
This commit is contained in:
parent
0145ab334e
commit
54714945f5
@ -13,67 +13,48 @@
|
||||
*/
|
||||
package com.mysema.query.jpa.impl;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.mysema.query.jpa.EclipseLinkTemplates;
|
||||
import com.mysema.query.jpa.HQLTemplates;
|
||||
import com.mysema.query.jpa.JPQLTemplates;
|
||||
import com.mysema.query.jpa.OpenJPATemplates;
|
||||
|
||||
/**
|
||||
* JPAProvider provides an enumeration of supported JPA providers
|
||||
* JPAProvider provides detection of the JPA provider based on the EntityManager instance
|
||||
*
|
||||
* @author tiwe
|
||||
*
|
||||
*/
|
||||
public enum JPAProvider {
|
||||
|
||||
/**
|
||||
* Hibernate
|
||||
*/
|
||||
HIBERNATE("org.hibernate.Session", new HQLTemplates()),
|
||||
public final class JPAProvider {
|
||||
|
||||
/**
|
||||
* EclipseLink
|
||||
*/
|
||||
ECLIPSELINK("org.eclipse.persistence.jpa.JpaEntityManager", new EclipseLinkTemplates()),
|
||||
private static final Map<Class<?>, JPQLTemplates> mappings = Maps.newHashMap();
|
||||
|
||||
/**
|
||||
* OpenJPA
|
||||
*/
|
||||
OPEN_JPA("org.apache.openjpa.persistence.OpenJPAEntityManager", new OpenJPATemplates()),
|
||||
|
||||
/**
|
||||
* Generic JPA provider
|
||||
*/
|
||||
GENERIC("javax.persistence.EntityManager", JPQLTemplates.DEFAULT);
|
||||
|
||||
private Class<?> delegateClass;
|
||||
|
||||
private final JPQLTemplates templates;
|
||||
|
||||
JPAProvider(String emClassName, JPQLTemplates templates) {
|
||||
this.templates = templates;
|
||||
try {
|
||||
this.delegateClass = Class.forName(emClassName);
|
||||
private static void addMapping(String className, JPQLTemplates templates) {
|
||||
try {
|
||||
mappings.put(Class.forName(className), templates);
|
||||
} catch (ClassNotFoundException e) {}
|
||||
}
|
||||
|
||||
public JPQLTemplates getTemplates() {
|
||||
return templates;
|
||||
}
|
||||
|
||||
public static JPAProvider get(EntityManager em) {
|
||||
for (JPAProvider provider : values()) {
|
||||
if (provider.delegateClass != null
|
||||
&& provider.delegateClass.isAssignableFrom(em.getDelegate().getClass())) {
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("No Provider for " + em.getClass().getName());
|
||||
static {
|
||||
addMapping("org.hibernate.Session", HQLTemplates.DEFAULT);
|
||||
addMapping("org.hibernate.ejb.HibernateEntityManager", HQLTemplates.DEFAULT);
|
||||
addMapping("org.eclipse.persistence.jpa.JpaEntityManager", EclipseLinkTemplates.DEFAULT);
|
||||
addMapping("org.apache.openjpa.persistence.OpenJPAEntityManager", OpenJPATemplates.DEFAULT);
|
||||
}
|
||||
|
||||
public static JPQLTemplates getTemplates(EntityManager em) {
|
||||
return get(em).getTemplates();
|
||||
for (Map.Entry<Class<?>, JPQLTemplates> entry : mappings.entrySet()) {
|
||||
if (entry.getKey().isAssignableFrom(em.getDelegate().getClass())) {
|
||||
return entry.getValue();
|
||||
}
|
||||
}
|
||||
return JPQLTemplates.DEFAULT;
|
||||
}
|
||||
|
||||
private JPAProvider() {}
|
||||
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@ public class JPAProviderTest {
|
||||
em = factory.createEntityManager();
|
||||
System.out.println(em.getDelegate().getClass());
|
||||
// println(em.getEntityManagerFactory().getProperties());
|
||||
assertEquals(JPAProvider.HIBERNATE, JPAProvider.get(em));
|
||||
assertEquals(HQLTemplates.DEFAULT, JPAProvider.getTemplates(em));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -54,7 +54,7 @@ public class JPAProviderTest {
|
||||
Thread.currentThread().getContextClassLoader(),
|
||||
new Class[]{EntityManager.class},
|
||||
handler);
|
||||
assertEquals(JPAProvider.HIBERNATE, JPAProvider.get(proxy));
|
||||
assertEquals(HQLTemplates.DEFAULT, JPAProvider.getTemplates(proxy));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -63,7 +63,7 @@ public class JPAProviderTest {
|
||||
em = factory.createEntityManager();
|
||||
System.out.println(em.getDelegate().getClass());
|
||||
// println(em.getEntityManagerFactory().getProperties());
|
||||
assertEquals(JPAProvider.ECLIPSELINK, JPAProvider.get(em));
|
||||
assertEquals(EclipseLinkTemplates.DEFAULT, JPAProvider.getTemplates(em));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -80,7 +80,7 @@ public class JPAProviderTest {
|
||||
Thread.currentThread().getContextClassLoader(),
|
||||
new Class[]{EntityManager.class},
|
||||
handler);
|
||||
assertEquals(JPAProvider.ECLIPSELINK, JPAProvider.get(proxy));
|
||||
assertEquals(EclipseLinkTemplates.DEFAULT, JPAProvider.getTemplates(proxy));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -89,7 +89,7 @@ public class JPAProviderTest {
|
||||
em = factory.createEntityManager();
|
||||
System.out.println(em.getDelegate().getClass());
|
||||
// println(em.getEntityManagerFactory().getProperties());
|
||||
assertEquals(JPAProvider.OPEN_JPA, JPAProvider.get(em));
|
||||
assertEquals(OpenJPATemplates.DEFAULT, JPAProvider.getTemplates(em));
|
||||
}
|
||||
|
||||
// private void println(Map<String, Object> properties) {
|
||||
|
||||
@ -12,4 +12,5 @@ Import-Template:
|
||||
javax.persistence.*;version="[1.1.0,2.1.0)",
|
||||
javax.xml.stream.*;version="0",
|
||||
org.hibernate.*;version="${hibernate.version}";resolution:=optional,
|
||||
org.slf4j.*;version="${slf4j.version}"
|
||||
org.slf4j.*;version="${slf4j.version}",
|
||||
com.google.common.*;version="${guava.version}"
|
||||
Loading…
Reference in New Issue
Block a user