【问题标题】:Spring Boot MongoDb CollectionsSpring Boot MongoDb 集合
【发布时间】:2015-12-08 13:13:05
【问题描述】:

我对 mongo 很陌生,所以这可能只是我不了解如何设置集合。我有 2 个域对象,为了简单起见,我将它们简化为基础。

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("danvega@gmail.com");
    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() 时,帖子包含作者对象

{ "_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" : "danvega@gmail.com" } }

但是当我运行 db.author.find() 时,我看不到那里的帖子集合。

{ "_id" : ObjectId("5666201fd4c6bcfd2f4caa8f"), "_class" : "com.therealdanvega.domain.Author", "firstName" : "Dan", "lastName" : "Vega", "email" : "danvega@gmail.com" }

有人知道我错过了什么吗?

【问题讨论】:

    标签: java spring mongodb spring-boot


    【解决方案1】:

    当你保存你的作者对象时,里面没有帖子。

    创建您的作者,并像您一样创建您的帖子。

    然后将刚刚创建的帖子设置到作者的帖子列表中并保存。

    这应该可以解决问题

    @PostConstruct
    private void initDatabase(){
    
      authorRepository.deleteAll();
    
      Author dv = new Author();
      dv.setFirstName("Dan");
      dv.setLastName("Vega");
      dv.setEmail("danvega@gmail.com");
      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 );
    
    }
    

    【讨论】:

    • 试一试,但它抱怨一些事情。 pastebin.com/raw.php?i=r199RLDP
    • 我知道你在那里做了什么。我将其移至构造函数,但这似乎现在可以工作。谢谢您的帮助!完全错过了那个。
    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2021-05-02
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    相关资源
    最近更新 更多