mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-16 21:01:10 +08:00
#201 simplified JPAProvider to use delegate instead of entity manager class
This commit is contained in:
parent
b26b896fed
commit
23056e6f20
@ -31,38 +31,31 @@ public enum JPAProvider {
|
||||
/**
|
||||
* Hibernate
|
||||
*/
|
||||
HIBERNATE("org.hibernate.ejb.HibernateEntityManager", HQLTemplates.DEFAULT, "hibernate"),
|
||||
HIBERNATE("org.hibernate.Session", HQLTemplates.DEFAULT),
|
||||
|
||||
/**
|
||||
* EclipseLink
|
||||
*/
|
||||
ECLIPSELINK("org.eclipse.persistence.jpa.JpaEntityManager", EclipseLinkTemplates.DEFAULT, "eclipselink"),
|
||||
ECLIPSELINK("org.eclipse.persistence.jpa.JpaEntityManager", EclipseLinkTemplates.DEFAULT),
|
||||
|
||||
/**
|
||||
* OpenJPA
|
||||
*/
|
||||
OPEN_JPA("org.apache.openjpa.persistence.OpenJPAEntityManager", OpenJPATemplates.DEFAULT, "openjpa"),
|
||||
OPEN_JPA("org.apache.openjpa.persistence.OpenJPAEntityManager", OpenJPATemplates.DEFAULT),
|
||||
|
||||
/**
|
||||
* Generic JPA provider
|
||||
*/
|
||||
GENERIC("javax.persistence.EntityManager", JPQLTemplates.DEFAULT, "");
|
||||
GENERIC("javax.persistence.EntityManager", JPQLTemplates.DEFAULT);
|
||||
|
||||
private Class<?> emClass;
|
||||
private Class<?> delegateClass;
|
||||
|
||||
private final JPQLTemplates templates;
|
||||
|
||||
private final String searchKey;
|
||||
|
||||
/**
|
||||
* @param emClassName class name of EntityManager implementation
|
||||
* @param templates
|
||||
*/
|
||||
JPAProvider(String emClassName, JPQLTemplates templates, String searchKey) {
|
||||
JPAProvider(String emClassName, JPQLTemplates templates) {
|
||||
this.templates = templates;
|
||||
this.searchKey = searchKey;
|
||||
try {
|
||||
this.emClass = Class.forName(emClassName);
|
||||
this.delegateClass = Class.forName(emClassName);
|
||||
} catch (ClassNotFoundException e) {}
|
||||
}
|
||||
|
||||
@ -71,12 +64,9 @@ public enum JPAProvider {
|
||||
}
|
||||
|
||||
public static JPAProvider get(EntityManager em) {
|
||||
String propsToString = em.getEntityManagerFactory().getProperties().toString();
|
||||
for (JPAProvider provider : values()) {
|
||||
if (provider.emClass != null && provider.emClass.isAssignableFrom(em.getClass())) {
|
||||
return provider;
|
||||
}
|
||||
if (propsToString.contains(provider.searchKey)) {
|
||||
if (provider.delegateClass != null
|
||||
&& provider.delegateClass.isAssignableFrom(em.getDelegate().getClass())) {
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,6 @@ import static org.junit.Assert.assertEquals;
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
@ -36,7 +35,8 @@ public class JPAProviderTest {
|
||||
public void Hibernate() {
|
||||
factory = Persistence.createEntityManagerFactory("h2");
|
||||
em = factory.createEntityManager();
|
||||
println(em.getEntityManagerFactory().getProperties());
|
||||
System.out.println(em.getDelegate().getClass());
|
||||
// println(em.getEntityManagerFactory().getProperties());
|
||||
assertEquals(JPAProvider.HIBERNATE, JPAProvider.get(em));
|
||||
}
|
||||
|
||||
@ -61,7 +61,8 @@ public class JPAProviderTest {
|
||||
public void EclipseLink() {
|
||||
factory = Persistence.createEntityManagerFactory("h2-eclipselink");
|
||||
em = factory.createEntityManager();
|
||||
println(em.getEntityManagerFactory().getProperties());
|
||||
System.out.println(em.getDelegate().getClass());
|
||||
// println(em.getEntityManagerFactory().getProperties());
|
||||
assertEquals(JPAProvider.ECLIPSELINK, JPAProvider.get(em));
|
||||
}
|
||||
|
||||
@ -84,14 +85,18 @@ public class JPAProviderTest {
|
||||
|
||||
@Test
|
||||
public void OpenJPA() {
|
||||
// TODO
|
||||
factory = Persistence.createEntityManagerFactory("derby-openjpa");
|
||||
em = factory.createEntityManager();
|
||||
System.out.println(em.getDelegate().getClass());
|
||||
// println(em.getEntityManagerFactory().getProperties());
|
||||
assertEquals(JPAProvider.OPEN_JPA, JPAProvider.get(em));
|
||||
}
|
||||
|
||||
private void println(Map<String, Object> properties) {
|
||||
for (Map.Entry<String, Object> entry : properties.entrySet()) {
|
||||
System.out.println(entry.getKey() + " = " + entry.getValue());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
// private void println(Map<String, Object> properties) {
|
||||
// for (Map.Entry<String, Object> entry : properties.entrySet()) {
|
||||
// System.out.println(entry.getKey() + " = " + entry.getValue());
|
||||
// }
|
||||
// System.out.println();
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
|
||||
<!--
|
||||
<persistence-unit name="derby-openjpa"
|
||||
transaction-type="RESOURCE_LOCAL">
|
||||
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
|
||||
@ -43,10 +42,8 @@
|
||||
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
|
||||
<property name="javax.persistence.jdbc.url" value="jdbc:derby:target/derbydb3;create=true" />
|
||||
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
|
||||
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
-->
|
||||
|
||||
<!-- hsqldb -->
|
||||
|
||||
@ -147,7 +144,7 @@
|
||||
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
|
||||
<property name="javax.persistence.jdbc.url" value="jdbc:h2:target/h2-3" />
|
||||
<property name="javax.persistence.jdbc.user" value="sa" />
|
||||
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='dropDB,deleteTableContents',ForeignKeys=true)"/>
|
||||
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='dropDB',ForeignKeys=true)"/>
|
||||
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
|
||||
<property name="openjpa.jdbc.Schemas" value="PUBLIC"/>
|
||||
<property name="openjpa.jdbc.DBDictionary" value="h2(useSchemaName=true)"/>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user