2015-12-08 63 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