我在使用morphia POJO映射器在mongodb中實現過濾器時遇到一些問題。在mongodb中通過morphia實現類中對象列表的字段訪問
在我的類(例如SampleClass
),當我嘗試訪問@Entity
類的字段(在我們的情況下,它Person
),我發現現場訪問工作正常,使用點符號爲如int,字符串一般領域,地圖或直接嵌入的對象。
問題是我無法理解它如何在Person
類中引用的「對象列表」的情況下工作。 (這裏假設,一個人可以有多個地址,所以這個Person
類有一個場addresses
持有Address
對象的列表)
@Entity
Class Person
{
String name;
int age;
String type;
private Map<String, String> personalInfo= new HashMap<String, String>();
@Reference
List<Address> addresses = new ArrayList<Address>;
}
@Entity
Class Address
{
String streetName;
int doorNo;
}
例如,我想在Address
對象的streetName
應用過濾器在addresses
列表
public class SampleClass
{
private Datastore ds;
Query<Node> query;
CriteriaContainer container;
// connections params etc....
public List<Person> sampleMethod()
{
query = ds.find(Person.class).field("type").equal("GOOD");
container.add(query.criteria("name").containsIgnoreCase("jo"));
// general String field in the Person Class ---- OKAY, Work's Fine
container.add(query.criteria("personalInfo.telephone").containsIgnoreCase("458"));
// Map field in the Person Class, accessing telephone key value in the map --- OKAY, Work's Fine
container.add(query.criteria("addresses.streetname").containsIgnoreCase("mainstreet"));
// List of address object in the Person Class, name of the field is 'addresses'
// ----NOT OKAY ????????? -- Here is the problem it returns nothing, even though some value exists
return readTopography(query.asList());
}
}
我在做訪問列表中的對象時出錯嗎?
感謝您的回覆。我找到了解決方案。我會在這裏發帖 –
我對這個問題有疑問,如果我將此字段設爲** @ Transient ** ** @參考**列表
addresses = new ArrayList ; - >那我可以應用相同的解決方案嗎?我發現它無法找到屬性地址,因爲它是暫時的(nt保存在數據庫中)。那麼我們該如何玩這樣的領域呢?它沒有保存,但我想解析使用此字段的查詢。有關這個的任何想法?謝謝! –您存儲爲瞬態的所有內容都必須被認爲只是暫時需要的信息(並且大部分沒有大的值)。所以基本上你對瞬態場的處理就是提供一些計算值作爲運行時間,超出其他非瞬態場。如果你需要這樣的信息來查詢,那麼他們不會將它們存儲在mongo中。 爲什麼你希望這是暫時的,而不是持續,你的業務邏輯是什麼? 爲什麼只有在運行時才需要人員/地址連接並且不會持續? – philnate