2016-12-14 150 views
1

我有這樣兩個文件,用戶:春數據和MongoDB - 繼承和@DBRef

@Document(collection = "User") 
public class User { 
    // fields 
} 

及聯繫方式:

@Document(collection = "Contact") 
public class Contact extends User{ 
    // fields 
} 

,然後我有referes要麼用戶奧德聯繫的文件:

@Document(collection = "DocumentFile") 
public class DocumentFile { 

    @DBRef 
    private User user; 
} 

所以我能夠添加UserOder聯繫人在DocumentFile#用戶,但如果我設置聯繫人到文檔員tFile#用戶比我失去了參考,因爲在MongoDB中DocumentFile#用戶存儲爲「_class」:「... Contact」。 有沒有解決方案?

+0

我在兩個不同領域的解決它** ** DocumentFile但我仍然有興趣在如何做到這一點的繼承與基本型的方式** **用戶 – quma

+0

你是什麼意思通過失去參考?你有問題獲取數據嗎? – Veeram

+0

是的,因爲** DocumentFile **文檔中的_class類型是** ...用戶**(如果它是聯繫人引用的話),但它應該是** ...聯繫**,因此當我檢索一個documentFile比user字段爲null。 – quma

回答

3

這就是你的類應該如何使DBRef與繼承一起工作的方式。

用戶

@Document(collection = "User") 
public class User { 

    @Id 
    private String id; 
    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

聯繫

請注意,您不需要在這個類文檔註釋。

public class Contact extends User { 

    private String address; 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 
} 

文檔文件

@Document(collection = "DocumentFile") 
public class DocumentFile { 

    @Id 
    private String id; 

    public void setId(String id) { 
     this.id = id; 
    } 

    @DBRef 
    private User user; 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

} 

你只需要CRUD操作IDocumentFileRepositoryIUserRepository

其餘的代碼以及測試用例已經上傳到github。

https://github.com/saagar2000/Spring