Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate(JPA)重复输入';25-9';对于键';初级';_Jpa_Duplicates_Parent_Many To One - Fatal编程技术网

Hibernate(JPA)重复输入';25-9';对于键';初级';

Hibernate(JPA)重复输入';25-9';对于键';初级';,jpa,duplicates,parent,many-to-one,Jpa,Duplicates,Parent,Many To One,我有一个与亲子关系有关的应用程序。每个父对象都有一组子对象(一对多),每个子对象都有一个父对象(多对一)。 在应用程序中,我有一个服务层,在该层中我基本上执行以下操作: public void addChild() { parent = getParentFromDB(); Child child = new Child(); child.setParent(parent); saveChild(child); Set&l

我有一个与亲子关系有关的应用程序。每个父对象都有一组子对象(一对多),每个子对象都有一个父对象(多对一)。 在应用程序中,我有一个服务层,在该层中我基本上执行以下操作:

  public void addChild() {
       parent = getParentFromDB();
       Child child = new Child();
       child.setParent(parent);
       saveChild(child);
       Set<Child> children = new HashSet<Child>();
       children.addAll(parent.getChildren());
       children.add(child);

       parent.setChildren(children); // notice this line here.

       saveParent(parent);
       doStuff(parent);
    }
我确实在hibernate中打开了SQL日志,似乎hibernate调用了save两次!!!如果我删除“//注意这里的这一行”这一行,一切都正常-实体保存在数据库中,我可以在数据库中看到25-9关系。问题是,在方法的末尾,我有doStuff(父级);方法,该方法对父级及其子级执行一些操作,因此我无法删除“//注意这里的这一行”行

编辑: 这是在子对象中声明父对象的方式:

@ManyToOne(fetch = FetchType.EAGER, targetEntity = ParentModel.class, cascade = { CascadeType.REMOVE })
@JoinTable(name = "PARENT_CHILDREN", joinColumns = @JoinColumn(name = "CHILD_ID"), inverseJoinColumns = @JoinColumn(name = "PARENT_ID"))
private ParentModel parent;
以下是在父级中声明子级的方式:

@OneToMany(fetch = FetchType.LAZY, targetEntity = ChildModel.class, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE })
@JoinTable(name = "PARENT_CHILDREN", joinColumns = @JoinColumn(name = "PARENT_ID"), inverseJoinColumns = @JoinColumn(name = "CHILD_ID"))
private Set<ChildModel> children;
@OneToMany(fetch=FetchType.LAZY,targetEntity=ChildModel.class,cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REMOVE})
@JoinTable(name=“PARENT\u CHILDREN”,joinColumns=@JoinColumn(name=“PARENT\u ID”),inverseJoinColumns=@JoinColumn(name=“CHILD\u ID”))
私人儿童;

您似乎只是缺少关系中的参数:

@OneToMany(mappedBy="parent", fetch = FetchType.LAZY, targetEntity = ChildModel.class, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE })
@JoinTable(name = "PARENT_CHILDREN", joinColumns = @JoinColumn(name = "PARENT_ID"), inverseJoinColumns = @JoinColumn(name = "CHILD_ID"))
private Set<ChildModel> children;
@OneToMany(mappedBy=“parent”,fetch=FetchType.LAZY,targetEntity=ChildModel.class,cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REMOVE})
@JoinTable(name=“PARENT\u CHILDREN”,joinColumns=@JoinColumn(name=“PARENT\u ID”),inverseJoinColumns=@JoinColumn(name=“CHILD\u ID”))
私人儿童;

请发布父项和子项的关系定义。如果在持久化依赖实体时出现配置错误。您可以发布父级和子级的映射吗?如果我添加mappedBy参数,我会在启动时出现此异常:由:org.hibernate.AnnotationException引起:标记为mappedBy的关联不能定义像\@JoinTable或@jointcolumn:xxxx.ParentModel.children这样的数据库映射,那么删除JoinTable呢我会接受你的回答。它实现了我所追求的,尽管它以不同的方式实现。最后的配置是:@ManyToOne(fetch=FetchType.EAGER,targetEntity=ParentModel.class,cascade={CascadeType.REMOVE})@JoinColumn(name=“PARENT\u ID”,nullable=true,referencedColumnName=“PK”)private ParentModel PARENT;和@OneToMany(mappedBy=“parent”,fetch=FetchType.LAZY,targetEntity=ChildrenModel.class,cascade={CascadeType.REMOVE})私有集子级@ben75我有一个类似的问题。你愿意帮我吗?以下是链接:
@OneToMany(mappedBy="parent", fetch = FetchType.LAZY, targetEntity = ChildModel.class, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE })
@JoinTable(name = "PARENT_CHILDREN", joinColumns = @JoinColumn(name = "PARENT_ID"), inverseJoinColumns = @JoinColumn(name = "CHILD_ID"))
private Set<ChildModel> children;