From 3f2ca5ccaddf243229081094aa31d3a470243fcc Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 4 Dec 2014 19:52:17 +0100 Subject: [PATCH] Respect the user-specified existing templates during JPAQuery.clone() --- .../mysema/query/jpa/impl/AbstractJPAQuery.java | 17 ++++++++++++++++- .../com/mysema/query/jpa/impl/JPAQuery.java | 10 ++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) 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 b8cf89514..05e63be05 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 @@ -355,13 +355,28 @@ public abstract class AbstractJPAQuery> extends JP */ public abstract Q clone(EntityManager entityManager); + /** + * Clone the state of this query to a new instance with the given EntityManager + * using the specified templates + * + * @param entityManager + * @param templates + * @return + */ + public abstract Q clone(EntityManager entityManager, JPQLTemplates templates); + /** * Clone the state of this query to a new instance * * @return */ public Q clone() { - return this.clone(this.entityManager); + JPQLTemplates existingTemplates = getTemplates(); + if (existingTemplates != null) { + return clone(entityManager, existingTemplates); + }else { + return clone(entityManager); + } } } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java index 534b3a8c2..645f62f54 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java @@ -74,10 +74,16 @@ public class JPAQuery extends AbstractJPAQuery { super(em, templates, metadata); } - public JPAQuery clone(EntityManager entityManager) { - JPAQuery q = new JPAQuery(entityManager, JPAProvider.getTemplates(entityManager), getMetadata().clone()); + @Override + public JPAQuery clone(EntityManager entityManager, JPQLTemplates templates) { + JPAQuery q = new JPAQuery(entityManager, templates, getMetadata().clone()); q.clone(this); return q; } + @Override + public JPAQuery clone(EntityManager entityManager) { + return clone(entityManager, JPAProvider.getTemplates(entityManager)); + } + }