From 965db09bda83ca54ba4b71cd537bff91f2cff99c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 10 Mar 2012 00:08:26 +0200 Subject: [PATCH] made Query transformation more generic --- querydsl-jpa/pom.xml | 15 ++++---- .../query/jpa/impl/AbstractJPAQuery.java | 37 +++++++++++-------- .../query/_derby/DerbyJPAEclipseLinkTest.java | 12 +----- 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 8f0f69c38..2afb2641a 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -54,7 +54,14 @@ slf4j-api - + + + + org.eclipse.persistence + eclipselink + 2.3.0-M6 + provided + org.hibernate.javax.persistence @@ -93,12 +100,6 @@ - - org.eclipse.persistence - eclipselink - 2.3.0-M6 - test - postgresql diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java index ad3f4c9bb..cd62e1ef1 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java @@ -13,6 +13,7 @@ */ package com.mysema.query.jpa.impl; +import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; @@ -72,8 +73,6 @@ public abstract class AbstractJPAQuery> extends JP @Nullable protected FlushModeType flushMode; - - protected boolean factoryExpressionUsed = false; @@ -159,25 +158,31 @@ public abstract class AbstractJPAQuery> extends JP // set transformer, if necessary and possible List> projection = getMetadata().getProjection(); if (projection.size() == 1 && !forCount) { - Expression expr = projection.get(0); + Expression expr = projection.get(0); if (expr instanceof FactoryExpression) { + String transformation = null; if (hibernateQueryClass != null && hibernateQueryClass.isInstance(query)) { + transformation = "com.mysema.query.jpa.impl.HibernateQueryTransformation"; + } +// else if (query.getClass().getName().startsWith("org.eclipse.persistence")) { +// transformation = "com.mysema.query.jpa.impl.EclipseLinkQueryTransformation"; +// } + if (transformation != null) { try { - Class cl = Class.forName("com.mysema.query.jpa.impl.HibernateQueryTransformation"); - cl.getConstructor(Query.class, FactoryExpression.class).newInstance(query, expr); - } catch (ClassNotFoundException e) { - throw new QueryException(e.getMessage(), e); - } catch (SecurityException e) { - throw new QueryException(e.getMessage(), e); - } catch (InstantiationException e) { - throw new QueryException(e.getMessage(), e); - } catch (IllegalAccessException e) { - throw new QueryException(e.getMessage(), e); - } catch (InvocationTargetException e) { - throw new QueryException(e.getMessage(), e); + Constructor c = Class.forName(transformation).getConstructor(Query.class, FactoryExpression.class); + c.newInstance(query, expr); } catch (NoSuchMethodException e) { - throw new QueryException(e.getMessage(), e); + throw new QueryException(e); + } catch (ClassNotFoundException e) { + throw new QueryException(e); + } catch (InstantiationException e) { + throw new QueryException(e); + } catch (IllegalAccessException e) { + throw new QueryException(e); + } catch (InvocationTargetException e) { + throw new QueryException(e); } + } else { factoryExpressionUsed = true; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/_derby/DerbyJPAEclipseLinkTest.java b/querydsl-jpa/src/test/java/com/mysema/query/_derby/DerbyJPAEclipseLinkTest.java index b11981fe1..30e807467 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/_derby/DerbyJPAEclipseLinkTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/_derby/DerbyJPAEclipseLinkTest.java @@ -49,17 +49,7 @@ public class DerbyJPAEclipseLinkTest extends AbstractJPATest{ public void Hint(){ // FIXME } - - @Override - public void TupleProjection(){ - // FIXME : custom projections don't work - } - - @Override - public void ArrayProjection(){ - // FIXME : custom projections don't work - } - + @Override public void Connection_Access(){ // cannot unwrap to Connection instance