簡體   English   中英

Morphia中的@Embedded注解實際上是做什么的?

[英]What does the @Embedded annotation in Morphia actually do?

當寫文件到Mongodb使用Morphia ,這樣的結構將被寫入沒有任何問題,並且不需要@Embedded注釋:

@Entity
public class Blog {
    @Id
    private String id;
    private List<Comment> comments;
}

comments字段愉快地存儲為嵌套的Comment元素數組( Comment是一個沒有注釋的普通POJO)。

但是, Morphia文檔建議我應該使用以下代碼:

@Entity
public class Blog {
    @Id
    private String id;
    @Embedded
    private List<Comment> comments;
}

但是在我的測試中,使用@Embedded注釋似乎並沒有做任何其他事情,而僅僅是編寫沒有注釋的結構。

那么@Embedded注釋實際上是做什么的呢? 除了簡單地寫入數據之外,它是否會影響查詢,索引或其他存儲功能的能力?

根據經驗,對於依賴於父對象(因此在其外部沒有生命)並且在對象之間不共享的對象,應@Embedded

默認情況下,Morphia在Mongo中使用字段名稱作為值名稱。 可以通過在@Embedded注釋上指定一個名稱來覆蓋它:

    @Embedded("blog_comments")
    private List<Comment> comments;

即使沒有@Embedded ,只要該類實現java.io.Serializable ,您仍然可以將其用作字段類型。 但是,該字段將以二進制格式而不是如上所示的結構化數據存儲在MongoDB中。

這里這里的資源

Serializable通常不與Morphia一起使用。 @Embedded有點模棱兩可,其原始意圖似乎已丟失。 實際上,在我正在制作Morphia官方2.0的分叉中,我對其進行了限制,使其僅適用於課程級別。 這告訴Morphia映射類型,但不會在缺少的@Id注釋上使映射失敗。 在該分支中,如果您想指定字段名稱以外的其他名稱,則只需使用@Property就像處理任何非嵌入式類型一樣。

我希望至少可以澄清一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM