diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java b/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java index 07fce7808..5e6822f18 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java @@ -544,6 +544,16 @@ public final class ExpressionUtils { return variable + "_" + suffix; } + /** + * Create a new root variable based on the given path + * + * @param path + * @return + */ + public static String createRootVariable(Path path) { + return path.accept(ToStringVisitor.DEFAULT, TEMPLATES); + } + /** * Converts the given object to an Expression * diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java index a915db42a..49d9c3260 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java @@ -137,7 +137,7 @@ public class JPAQueryMixin extends QueryMixin { } } else if (metadata.getParent().getMetadata().isRoot()) { Class type = getElementTypeOrType(path); - Path newPath = new PathImpl(type, path.toString().replace('.', '_')); + Path newPath = new PathImpl(type, ExpressionUtils.createRootVariable(path)); leftJoin(path, newPath); return newPath; } else { @@ -145,7 +145,7 @@ public class JPAQueryMixin extends QueryMixin { Path parent = shorten(metadata.getParent(), paths); Path oldPath = new PathImpl(path.getType(), new PathMetadata(parent, metadata.getElement(), metadata.getPathType())); - Path newPath = new PathImpl(type, oldPath.toString().replace('.', '_')); + Path newPath = new PathImpl(type, ExpressionUtils.createRootVariable(oldPath)); aliases.put(path, newPath); leftJoin(oldPath, newPath); return newPath;