2012-11-26 69 views
4

我仍然試圖繞過mongodb以及如何映射最佳實體。如果你拿例如:實體用戶和實體地址。當有人來自jpa背景時,可能會有one-to-many。這裏在蒙戈我不想使用dbref。因此地址位於用戶的Set集合中。關於mongodb子文檔和spring-data-mongo查詢的問題

假如我是使用spring-data-mongo

問題1:既要用戶和地址有@Document註解或只是用戶?

問題2:什麼是查詢用戶地址的最佳方式。這是可能的第一個地方?因爲現在我查詢得到UserusernameId然後得到用戶的地址。我可以直接查詢sub-document

@Document 
public class User{ 
    @Id 
    private Long ID; 
    private String username; 
    private Set<Address> addresses = new HashSet<Address>(); 
    ... 
} 

@Document 
public class Address { 
    @Id 
    private Long ID; 
    private String city; 
    private String line1; 
    ... 

} 

回答

4

問題1:不,@Document並非絕對必要在所有如果是被它採用spring-data-mongo條件查詢做如何。如果激活文檔類的類路徑掃描,我們只是在應用程序啓動時利用此功能。如果你不持久性元數據掃描將在第一次持久性操作上完成。然後我們遍歷域對象的屬性,因此將會發現Address

問題2:您必須完全讀取User對象,因爲MongoDB目前不允許返回子文檔。因此,您必須查詢整個User文檔,但可以使用Query對象或存儲庫抽象的@Query註釋(請參見ref docs)上的fieldSpec來限制字段返回到addresses字段。