2015-12-08 61 views
1

我對mongo很新,所以這可能只是我不瞭解如何設置集合。我有2個域對象,爲了簡單起見,我已將它們分解爲基本內容。Spring Boot MongoDb Collections

Post.java

@Document 
public class Post { 

    @Id 
    private BigInteger id; 

    private String title; 

    private String body; 

    private String teaser; 

    private String slug; 

    private Date postedOn; 

    private Author author; 

    public Post(){ 

    } 

    // getters & setters 

} 

Author.java

@Document 
public class Author { 

    private BigInteger id; 
    private String firstName; 
    private String lastName; 
    private String email; 

    @DBRef 
    private List<Post> posts; 

    public Author(){ 

    } 

    // getters and setters 

} 

我有一個被調用的一些數據加載到數據庫的方法。

@PostConstruct 
private void initDatabase(){ 

    authorRepository.deleteAll(); 

    Author dv = new Author(); 
    dv.setFirstName("Dan"); 
    dv.setLastName("Vega"); 
    dv.setEmail("[email protected]"); 
    authorRepository.save(dv); 

    postRepository.deleteAll(); 

    Post post = new Post(); 
    post.setTitle("Spring Data Rocks!"); 
    post.setSlug("spring-data-rocks"); 
    post.setTeaser("Post Teaser"); 
    post.setBody("Post Body"); 
    post.setPostedOn(new Date()); 
    post.setAuthor(dv); 
    postRepository.save(post); 

} 

當我從控制檯運行mongo並顯示集合時,我看到了帖子和作者集合。

當我運行db.post.find()後包含author對象

{ "_id" : ObjectId("5666201fd4c6bcfd2f4caa90"), "_class" : "com.therealdanvega.domain.Post", "title" : "Spring Data Rocks!", "body" : "Post Body", "teaser" : "Post Teaser", "slug" : "spring-data-rocks", "postedOn" : ISODate("2015-12-08T00:11:11.090Z"), "author" : { "_id" : ObjectId("5666201fd4c6bcfd2f4caa8f"), "firstName" : "Dan", "lastName" : "Vega", "email" : "[email protected]" } } 

但是當我運行db.author.find()我沒有看到在那裏收集後。

{ "_id" : ObjectId("5666201fd4c6bcfd2f4caa8f"), "_class" : "com.therealdanvega.domain.Author", "firstName" : "Dan", "lastName" : "Vega", "email" : "[email protected]" } 

有沒有人知道我失蹤了?

回答

1

當你保存你的作者對象時,裏面沒有帖子。

創建您的作者,並創建你發佈你做。

然後設置剛剛創建到作者的文章列表的帖子,並將其保存。

這應該做的伎倆

@PostConstruct 
private void initDatabase(){ 

    authorRepository.deleteAll(); 

    Author dv = new Author(); 
    dv.setFirstName("Dan"); 
    dv.setLastName("Vega"); 
    dv.setEmail("[email protected]"); 
    authorRepository.save(dv); 

    postRepository.deleteAll(); 

    Post post = new Post(); 
    post.setTitle("Spring Data Rocks!"); 
    post.setSlug("spring-data-rocks"); 
    post.setTeaser("Post Teaser"); 
    post.setBody("Post Body"); 
    post.setPostedOn(new Date()); 
    post.setAuthor(dv); 
    postRepository.save(post); 

    // add the code below 
    dv.posts = new ArrayList<Post>(); 
    dv.posts.add(post); 
    authorRepository.save(dv); 

} 
+0

給了一個嘗試,但它的滿腹牢騷。 http://pastebin.com/raw.php?i=r199RLDP – cfaddict

+0

@cfaddict我使用init編輯我的代碼的帖子列表 – khanou

+0

我看你做了什麼沒有。我把它移到了構造函數中,但現在這似乎正在工作。謝謝您的幫助!完全錯過了那一個。 – cfaddict