diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 1499943d2..578fcc3e3 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -330,13 +330,16 @@ public abstract class MongodbSerializer implements Visitor { public String visit(Path expr, Void context) { PathMetadata metadata = expr.getMetadata(); if (metadata.getParent() != null) { + Path parent = metadata.getParent(); + if (parent.getMetadata().getPathType() == PathType.DELEGATE) { + parent = parent.getMetadata().getParent(); + } if (metadata.getPathType() == PathType.COLLECTION_ANY) { - return visit(metadata.getParent(), context); - } else if (metadata.getParent().getMetadata().getPathType() != PathType.VARIABLE - && metadata.getParent().getMetadata().getPathType() != PathType.DELEGATE) { + return visit(parent, context); + } else if (parent.getMetadata().getPathType() != PathType.VARIABLE) { String rv = getKeyForPath(expr, metadata); - String parent = visit(metadata.getParent(), context); - return rv != null ? parent + "." + rv : parent; + String parentStr = visit(parent, context); + return rv != null ? parentStr + "." + rv : parentStr; } } return getKeyForPath(expr, metadata); diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index 90b23dcd7..b5a68b63b 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -30,6 +30,7 @@ import com.mongodb.DBObject; import com.querydsl.core.types.Expression; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.*; +import com.querydsl.mongodb.domain.QAddress; import com.querydsl.mongodb.domain.QDummyEntity; import com.querydsl.mongodb.domain.QPerson; import com.querydsl.mongodb.domain.QUser; @@ -263,6 +264,15 @@ public class MongodbSerializerTest { assertQuery(person.addressId.eq(id), dbo("addressId",id)); } + @Test + public void Path() { + QUser user = QUser.user; + assertEquals("firstName", serializer.visit(user.firstName, null)); + assertEquals("firstName", serializer.visit(user.as(QUser.class).firstName, null)); + assertEquals("mainAddress.street", serializer.visit(user.mainAddress().street, null)); + assertEquals("mainAddress.street", serializer.visit(user.mainAddress().as(QAddress.class).street, null)); + } + private List> sortList(OrderSpecifier ... order) { return Arrays.asList(order);