Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Hibernate-自连接多对多实体can';不能更新_Java_Spring_Hibernate - Fatal编程技术网

Java Spring Hibernate-自连接多对多实体can';不能更新

Java Spring Hibernate-自连接多对多实体can';不能更新,java,spring,hibernate,Java,Spring,Hibernate,我正在尝试向父对象添加注释,如果它属于父对象注释是一个自连接的多对多实体,如下所示 在这个函数中,我通过getParentId()搜索parentId,试图找到注释是否属于父项 如果不为null,则必须存在父级,因此,找到此父级,并将此注释实例添加为父级的子命令集合之一 我似乎无法正确地持久化新添加的子元素 public ResponseEntity<Comment> addComment(Comment comment) { Comment newComment = com

我正在尝试向父对象添加
注释
,如果它属于父对象<代码>注释
是一个自连接的多对多实体,如下所示

在这个函数中,我通过
getParentId()
搜索
parentId
,试图找到
注释是否属于父项

如果不为null,则必须存在父级,因此,找到此父级,并将此
注释
实例添加为父级的
子命令
集合之一

我似乎无法正确地持久化新添加的子元素

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);
}
public responseenty addComment(注释){
Comment newComment=commentRepository.save(Comment);
if(newComment.getParentId()!=null){
Comment parent=commentRepository.findById(newComment.getParentId()).orElse(null);
如果(父项!=null){
设置parentsubcomment=parent.getsubcomment();
parentsubcomment.add(新成员);
parent.setSubComments(parentsubcomments);
commentRepository.save(父级);
}
}
返回响应。ok(新成员);
}
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;
    }
}
import org.hibernate.annotations.CreationTimestamp;
导入javax.persistence.*;
导入java.time.LocalDateTime;
导入java.time.format.DateTimeFormatter;
导入java.util.HashSet;
导入java.util.Set;
@实体
公开课评论{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有字符串id;
私有字符串文本;
@CreationTimestamp
私有LocalDateTime createDateTime;
@OneToMany(mappedBy=“parentComment”)
private Set subcents=new HashSet();
@许多酮
@JoinColumn(referencedColumnName=“id”)
私人评论;
private int likeCount=0;
私有布尔值是公共的;
私有字符串parentId;
公共字符串getParentId(){
返回parentId;
}
public void setParentId(字符串parentId){
this.parentId=parentId;
}
公共集合getSubComments(){
返回子命令;
}
public void setSubComments(Set subComments){
this.subcents=subcents;
}
公共评论getParentComment(){
返回parentComment;
}
public void setParentComment(Comment parentComment){
this.parentComment=parentComment;
}
公共布尔getIsParent(){
返回isParent;
}
公共void setIsParent(布尔isParent){
this.isParent=isParent;
}
public int getLikeCount(){
返回式计数;
}
公共无效incLikeCount(){
这个.likeCount++;
}
公共字符串getCreateDateTime(){
DateTimeFormatter formatter=DateTimeFormatter.of模式(“mm dd,yyyy@hh:mm a”);
返回createDateTime.format(格式化程序);
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
@凌驾
公共字符串toString(){
返回“id:+id+”text:+text+“isParent:+isParent+”parentId:+parentId;
}
}

您应该更新parentComment的实体并添加cascade属性

@ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(referencedColumnName = "id")
        private Comment parentComment;

@JoinColumn
中的
parentComment
属性的
名称是什么?现在它看起来像一个默认的-Id。尝试添加
@JoinColumn(name=“parentId”)
@YuriyTsarkov我想我不明白你的问题。我认为这只是现在的默认值,如果您询问联接列的名称。我认为这里的设计不好,因为添加一个子元素,您从db查询现有子元素,然后添加新注释作为子元素。如果有很多子命令会发生什么?@GauravSrivastav你是说使用
setSubComments
不好吗?如果是这样的话,我可以很容易地添加一个方法来添加新的
注释
。我知道设计可能很糟糕,但我眼前的问题是,在我添加了一个新的COMMETW后,我无法更新我的db。您会得到什么错误?您能解释一下cascade如何帮助更新吗?我试过了,结果还是一样,空的
子元素