讓我們假設我有一個類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