持久列表关系spring数据mongodb

时间:2016-02-29 15:28:05

标签: java spring mongodb spring-data spring-data-mongodb

出了什么问题,我试图在评论列表中添加新评论,评论被映射为Post类的列表。

这是我的代码。

Post.java

@Document
public class Post {

    @Id
    private String id;

    @DBRef
    private List<Comment> comments;

    public void addComment(Comment comment) {
    if (comments == null) {
        comments = new ArrayList<>();
    }
    this.comments.add(comment);
    }
    // getters and setters....
}

Comment.java

@Document
public class Comment {

    @Id
    private String id;
    private String comment;
    private int rating;

    // getters and setters....
}

的Test.class

@Test
public void savePostWithComments() {
    Post post = postRepository.findAll().get(1);

    Comment comment = new Comment();
    comment.setComment("comment");
    comment.setRating(5);

    post.addComment(comment);
    postRepository.save(post);
}

测试因此错误而失败

  

org.springframework.data.mapping.model.MappingException:无法创建对具有NULL id的对象的引用。

所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:5)

参考spring-data-mongodb docs

  

重要   映射框架不处理级联保存。如果更改Person对象引用的Account对象,则必须单独保存Account对象。在Person对象上调用save不会自动将Account对象保存在属性帐户中。

添加

commentRepository.save(comment);

在持久化Post对象之前重新解决问题