I am new to Mongo and also to Google Morphia, i am trying to solve
below
problem without any access.
The datastore service classes for the user chalss are based on
following code:
public class DataStoreObject<T, ID> implements DataAccessObject<T,
ID>,
DataProvider<T> {
private Class<T> entityClass;
private Datastore datastore = null;
private String databaseName = null;
private Query<T> query;
....
public T findOne(final String fieldName, final String value) {
Query<T> query = datastore.createQuery(entityClass).field(fieldName)
.equal(value);
if (query == null)
return null;
return query.get();// CCE thrown
}
...
}
public class UserHome extends DataStoreObject<User, ObjectId> {
public UserHome(final Class<User> entityClass, final String
databaseName) {
super(entityClass, databaseName);
}
...
}
The user class itself :
@Entity(value = "USER", noClassnameStored = true)
public class User implements UserDetails {
@Indexed(value = IndexDirection.ASC, name = "username", unique =
true, dropDups = false)
private String username = null;
@Indexed(value = IndexDirection.ASC, name = "IDX_USER_EMAIL", unique
= false)
private String email = null;
@Embedded
private Map<String, UserAttribute> properties = new HashMap<String,
UserAttribute>();
...
}
The embedded class is a simple POJO.
Running the following test code :
public void deleteUser() {
User user = userHome.findOne("username", "
a...@web.cn"); // CCE
thrown
if (user != null)
userHome.delete(user);
user = userHome.findOne("username", "
a...@web.cn");
Assert.assertNull(user);
}
throws a class cast exception :
java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.ClassCastException: java.lang.String cannot be cast to
com.mongodb.DBObject
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:483)
at com.google.code.morphia.mapping.Mapper.fromDBObject(Mapper.java:
267)
at
com.google.code.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:
53)
at
com.google.code.morphia.query.MorphiaIterator.next(MorphiaIterator.java:
48)
at com.google.code.morphia.query.QueryImpl.get(QueryImpl.java:344)
at
org.adams.web.basic.persistence.DataStoreObject.findOne(DataStoreObject.java:
128)
at org.adams.basic.test.MongoDbTest.deleteUser(MongoDbTest.java:42)
at org.adams.basic.test.MongoDbTest.test(MongoDbTest.java:35)
....
Caused by: java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.RuntimeException: java.lang.ClassCastException:
java.lang.String cannot be cast to com.mongodb.DBObject
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:
146)
at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:
499)
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:480)
... 35 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.ClassCastException: java.lang.String cannot be cast to
com.mongodb.DBObject
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:483)
at
com.google.code.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:
231)
at
com.google.code.morphia.mapping.EmbeddedMapper.readMap(EmbeddedMapper.java:
207)
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:
117)
... 37 more
Caused by: java.lang.RuntimeException: java.lang.ClassCastException:
java.lang.String cannot be cast to com.mongodb.DBObject
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:
146)
at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:
503)
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:480)
... 40 more
Caused by: java.lang.ClassCastException: java.lang.String cannot be
cast to com.mongodb.DBObject
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:
136)
... 42 more
Any idea what goes wrong here ? I'using morphia 0.99, java 1.6, mongo-
java-driver 2.4.
Any help would be highly appreciated.
c. Thomas