【问题标题】:SpringBoot Parent-Child RelationSpringBoot 亲子关系
【发布时间】:2019-02-28 23:53:24
【问题描述】:

我有以下 Springboot 代码:

comment.java

@Entity
@Getter @Setter @NoArgsConstructor @RequiredArgsConstructor
public class Comment extends Auditable {

    @Id
    @GeneratedValue
    private Long id;

    @NonNull
    private String comment;

    @ManyToOne(fetch = FetchType.LAZY)
    private Link link;
}

链接.java

@Entity
@Getter @Setter @NoArgsConstructor @RequiredArgsConstructor
public class Link extends Auditable {

    @Id
    @GeneratedValue
    private Long id;

    @NonNull
    private String title;

    @NonNull
    private String url;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "link")
    private List<Comment> comments = new ArrayList<>();

    public void addComment(Comment c) {
        comments.add(c);
    }
}

还有下面的Runner:

 @Bean
 CommandLineRunner someRunner(LinkRepository lr, CommentRepository cr) {
     return args -> {
         Link link = new Link("Getting started", "url");
         Comment c = new Comment("Hello!");
         link.addComment(c);
         linkRepository.save(link);
     };
 };

我正在尝试将评论链接到链接,并将两者保存在一起。然而,这是输出:

[
    {
        createdBy: null,
        createdDate: "2/28/19, 11:48 PM",
        lastModifiedBy: null,
        lastModifiedDate: "2/28/19, 11:48 PM",
        id: 2,
        comment: "Hello!",
        link: null
    }
]

关于如何让链接实际显示在链接列表中的任何建议?

【问题讨论】:

  • 需要在addComment方法中添加c.setLink(this);

标签: hibernate spring-boot


【解决方案1】:

在双向关系中,必须设置关系的双方;

Link link = new Link("Getting started", "url");
Comment comment = new Comment("Hello!");
comment.setLink(link);  // missing in your code
link.addComment(comment);
linkRepository.save(link);

勾选“双向多对一关联” > here

【讨论】:

  • 嗨,谢谢,我的印象是 CascadeType.ALL 也适用于关联实体(即:评论)?从这里:stackoverflow.com/a/13027444/1876047
  • 我明白了,我原以为是因为我在注释中有 mappedBy 参数,该参数会自动完成,但似乎没有。有什么方法可以配置它,以便当我向链接添加评论时,它也会自动将链接添加到评论中?我想我可以在 addComment 方法中执行类似 comment.setLink(this) 的操作,但我希望有一些自动配置允许 SpringBoot 自动获取它
  • @MrD 我有确切的想法,但不确定为什么它不存在。一定是在某些情况下它可能会破坏覆盖的持久性逻辑吗?看起来很简单,但我们需要明确并手动完成......我们有 50 个表连接到一个父表,在 5 步深层次结构中。你能想象那种恐怖吗?我已经创建了一个完整的自动化通用实体结构来处理它,就像你建议的那样 =P
  • 有道理谢谢,现在我刚刚添加了comment.setLink(this);在 addComment 方法中,它似乎工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多