让我们假设我有一个类Foo
被注释用于在吗啡如何使用Morphia保存到不同的集合?
@Entity("Foo")
public class Foo{
...
}
很多时候我读/时间从数据库中写Foo
我想用Foo
收集
datastore.save(foos);
但有时我想读取/写入Bar
集合。如何将Foo
保存到Morphia的收藏Bar
?
让我们假设我有一个类Foo
被注释用于在吗啡如何使用Morphia保存到不同的集合?
@Entity("Foo")
public class Foo{
...
}
很多时候我读/时间从数据库中写Foo
我想用Foo
收集
datastore.save(foos);
但有时我想读取/写入Bar
集合。如何将Foo
保存到Morphia的收藏Bar
?
我认为唯一的办法是子类:
@Entity("Bar")
public class Bar extends Foo {
你需要实例化正确的类,但应该能够避免代码重复。
如果你有一个共同的基类(public class Foo extends Base
),你可以使用上坚持共同查询,得到的,...基于仿制药:
public <E extends Base> void persist(E entity) {
mongoDataStore.save(entity);
}
public <E extends Base> E get(Class<E> clazz, ObjectId id) {
return mongoDataStore.find(clazz).field("id").equal(id).get();
}
然后,你可以简单地做这样的事情:
Bar bar = new Bar();
persistenceService.persist(bar);
Foo foo = new Foo();
persistenceService.persist(foo);
Bar barFetched = persistenceService.get(Bar.class, ...);
您可以将Datastore
投射到AdvancedDatastore
并致电save(String kind, T entity)
。
我给了一个镜头,但我得到'线程中的异常“主”“org.bson.codecs.configuration.CodecConfigurationException:无法找到Foo类的编解码器。是否需要成为一个已经存在的实体? –
“kind”只是一个集合名称。不知道为什么你会得到那一个。我会看看测试,并确保我们覆盖这个用例。 – evanchooly
你可以找到一个repro bug [here](https://goo.gl/BxYE9M)。只需做一个“CwacDemoApp”的香草运行,你应该看到第28行的例外。 –
但是后来我需要将它放到'bar',这不是理想的 –
好的,我添加了更多的代码。在哪种情况下你需要铸造? – xeraa