我有两节课
Movie
Collection<Session> sessions;
Session
Movie movie;
如果我在电影上定义以下方法:
addSession() {
this.sessions.add(session);
session.setMovie(this);
}
然后是 Session 上的方法:
Object movieId;
setMovie(Movie movie) {
this.movieId = movie.getId();
}
我可以保存 Movie & Session 对象,但是当我尝试使用 Movie.findById 检索电影时,我得到了一个堆栈跟踪(如下)
但是,如果我没有在会话中设置 movieId 字段,那么我可以成功检索拥有的电影。
有什么想法我可能做错了吗?
java.lang.ClassCastException:org.bson.types.ObjectId 不能转换为 com.mongodb.DBObject 在 com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:136) 在 com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:507) 在 com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:484) 在 com.google.code.morphia.mapping.ReferenceMapper.resolveObject(ReferenceMapper.java:277) 在 com.google.code.morphia.mapping.ReferenceMapper.readCollection(ReferenceMapper.java:225) 在 com.google.code.morphia.mapping.ReferenceMapper.fromDBObject(ReferenceMapper.java:143) 在 com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:505) 在 com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:484) 在 com.google.code.morphia.mapping.Mapper.fromDBObject(Mapper.java:267) 在 com.google.code.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:66) 在 com.google.code.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:53) 在 com.google.code.morphia.query.MorphiaIterator.next(MorphiaIterator.java:48) 在 com.google.code.morphia.query.QueryImpl.get(QueryImpl.java:365) 在 play.modules.morphia.Model$MorphiaQuery._get(Model.java:1045) 在models.morphia.Movie.findById(Movie.java) 在models.MovieTest.testSave(MovieTest.java:37) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 在 play.test.PlayJUnitRunner$StartPlay$1$1$1.execute(PlayJUnitRunner.java:73) 在 play.Invoker$Invocation.run(Invoker.java:265) 在 play.Invoker.invokeInThread(Invoker.java:67) 在 play.test.PlayJUnitRunner$StartPlay$1$1.evaluate(PlayJUnitRunner.java:68) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:236) 在 play.test.PlayJUnitRunner.run(PlayJUnitRunner.java:48) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)