0

私は2つのクラスを持っています

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(ネイティブメソッド)
    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) で
4

1 に答える 1

0

Movie永続化したいのは奇妙に見えmovieIdますSession

ユースケースに応じて、おそらくmovieId一時的にするか、 として宣言できますorg.bson.types.ObjectId

于 2011-12-22T14:04:20.223 に答える