mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-13 21:01:01 +08:00
Improve delegate path handling
This commit is contained in:
parent
5789cae7d9
commit
36e05ab00a
@ -330,13 +330,16 @@ public abstract class MongodbSerializer implements Visitor<Object, Void> {
|
||||
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);
|
||||
|
||||
@ -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<OrderSpecifier<?>> sortList(OrderSpecifier<?> ... order) {
|
||||
return Arrays.asList(order);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user