Spring Hibernate - Самостоятельно присоединенный объект «многие ко многим» не может быть обновлен - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь добавить comment к родителю, если он принадлежит ему.Comment - это самосвязанная сущность «многие ко многим», как показано ниже.

В этой функции я пытаюсь выяснить, принадлежит ли Comment родительскому элементу, выполняя поиск, имеет ли онparentId до getParentId().

Если оно не равно нулю, должен быть родитель, поэтому найдите этот родитель и добавьте этот экземпляр comment в качестве одного из набора subComment родительского.

Я могупохоже, что не удалось сохранить новые добавленные подкомменты.

public ResponseEntity<Comment> addComment(Comment comment) {
    Comment newComment = commentRepository.save(comment);

    if (newComment.getParentId() != null) {
        Comment parent = commentRepository.findById(newComment.getParentId()).orElse(null);
        if (parent != null) {
            Set<Comment> parentSubcComment = parent.getSubComments();
            parentSubcComment.add(newComment);
            parent.setSubComments(parentSubcComment);
            commentRepository.save(parent);
        }
    }

    return ResponseEntity.ok(newComment);
}

Класс сущности Comment.java

import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashSet;
import java.util.Set;

@Entity
public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;
    private String text;

    @CreationTimestamp
    private LocalDateTime createDateTime;

    @OneToMany(mappedBy = "parentComment")
    private Set<Comment> subComments = new HashSet<>();

    @ManyToOne
    @JoinColumn(referencedColumnName = "id")
    private Comment parentComment;

    private int likeCount = 0;
    private boolean isParent;
    private String parentId;

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    public Set<Comment> getSubComments() {
        return subComments;
    }

    public void setSubComments(Set<Comment> subComments) {
        this.subComments = subComments;
    }

    public Comment getParentComment() {
        return parentComment;
    }

    public void setParentComment(Comment parentComment) {
        this.parentComment = parentComment;
    }

    public boolean getIsParent() {
        return isParent;
    }

    public void setIsParent(boolean isParent) {
        this.isParent = isParent;
    }

    public int getLikeCount() {
        return likeCount;
    }

    public void incLikeCount() {
        this.likeCount++;
    }

    public String getCreateDateTime() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy @ hh:mm a");
        return createDateTime.format(formatter);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    @Override
    public String toString() {
        return "id: " + id + " text: " + text + " isParent: " + isParent + " parentId: " + parentId;
    }
}

1 Ответ

0 голосов
/ 26 мая 2018

Вы должны обновить сущность для parentComment и добавить свойство каскада.

@ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(referencedColumnName = "id")
        private Comment parentComment;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...