From 6fdf826067ee2363735a28efd78e12510f0bfaf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 4 Jul 2011 07:09:15 +0000 Subject: [PATCH] #789021 : added support for enums in queries --- .../mysema/query/mongodb/MongodbSerializer.java | 6 +++++- .../mysema/query/mongodb/MongodbQueryTest.java | 12 ++++++++++++ .../com/mysema/query/mongodb/domain/User.java | 16 ++++++++++++++-- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbSerializer.java index f98faf29a..527bbfdde 100644 --- a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbSerializer.java @@ -42,7 +42,11 @@ public class MongodbSerializer implements Visitor { @Override public Object visit(Constant expr, Void context) { - return expr.getConstant(); + if (Enum.class.isAssignableFrom(expr.getType())) { + return ((Enum)expr.getConstant()).name(); + } else { + return expr.getConstant(); + } } @Override diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java index 070f1fa7a..703196aac 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java @@ -28,6 +28,7 @@ import com.mysema.query.mongodb.domain.Address; import com.mysema.query.mongodb.domain.City; import com.mysema.query.mongodb.domain.QUser; import com.mysema.query.mongodb.domain.User; +import com.mysema.query.mongodb.domain.User.Gender; import com.mysema.query.mongodb.morphia.MorphiaQuery; import com.mysema.query.types.OrderSpecifier; import com.mysema.query.types.Predicate; @@ -285,6 +286,16 @@ public class MongodbQueryTest { where(predicate.not()).count(); } } + + @Test + public void Enum_Eq() { + assertQuery(user.gender.eq(Gender.MALE), u3, u4, u2, u1); + } + + @Test + public void Enum_Ne() { + assertQuery(user.gender.ne(Gender.MALE)); + } //TODO // - test dates @@ -331,6 +342,7 @@ public class MongodbQueryTest { private User addUser(String first, String last, int age, Address mainAddress, Address... addresses) { User user = new User(first, last, age, new Date()); + user.setGender(Gender.MALE); user.setMainAddress(mainAddress); for (Address address : addresses){ user.addAddress(address); diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/domain/User.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/domain/User.java index ef3d38121..2876fc2dc 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/domain/User.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/domain/User.java @@ -19,6 +19,8 @@ import com.google.code.morphia.annotations.Reference; @Entity public class User { + public enum Gender { MALE, FEMALE } + private @Id ObjectId id; private String firstName; @@ -27,14 +29,16 @@ public class User { private Date created; + private Gender gender; + @Embedded - private List
addresses = new ArrayList
(); + private final List
addresses = new ArrayList
(); @Embedded private Address mainAddress; @Reference - private List friends = new ArrayList(); + private final List friends = new ArrayList(); private int age; @@ -131,6 +135,14 @@ public class User { return friends; } + public Gender getGender() { + return gender; + } + + public void setGender(Gender gender) { + this.gender = gender; + } + @Override public int hashCode() { final int prime = 31;