Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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 JPA单向OneToMany插入或更新父级,子级来自JSON_Java_Hibernate_Jpa_Persistence - Fatal编程技术网

Java JPA单向OneToMany插入或更新父级,子级来自JSON

Java JPA单向OneToMany插入或更新父级,子级来自JSON,java,hibernate,jpa,persistence,Java,Hibernate,Jpa,Persistence,我想写一个方法,当给定对象的父对象和子对象在数据库中不存在时插入它们,或者当id不为null时更新它 例如: @Entity public class Parent { @Id @Column(name = "PARENT_ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column private String property;

我想写一个方法,当给定对象的父对象和子对象在数据库中不存在时插入它们,或者当id不为null时更新它

例如:

@Entity
public class Parent {
    @Id
    @Column(name = "PARENT_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column
    private String property;

    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID")
    private Set<Child> children;
    // getters and setters
}

@Entity
public class Child{
    @Id
    @Column(name = "CHILD_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column
    private String property;

    @Column(name="PARENT_ID")
    private Integer parentId;
    // getters and setters
}
Save方法返回id=1的父对象和parentId=1的子对象以及从1到3的id-父对象及其子对象现在在数据库中

在事务之外进行一些更改后,我将传递给先前返回的父级保存方法:

{
  "id": 1,
  "property": "changed val",
  "children": [
    {
      "id": 1,
      "property": "some val",
      "parentId": 1
    },
    {
      "id": 2,
      "property": "some val",
      "parentId": 1
    },
    {
      "id": 3,
      "property": "changed val",
      "parentId": 1
    },
    {
      "property": "new child val"
    }
  ]
}
我收到异常(数据库中存在父实体,一些子实体存在,一些不存在):


我应该如何处理这种情况?

您是否尝试过检查没有父id的子项,然后在保存之前从传递的父项设置它?您的级联类型。父项上的所有内容都将为您解决此问题。只需保存父项,子项将被删除并相应地重新插入。如果仅使用
返回entityManager.merge(父项)
则出现错误“列'parent_ID'不能为空”
{
  "property": "some val",
  "children": [
    {
      "property": "some val"
    },
    {
      "property": "some val"
    },
    {
      "property": "some val"
    }
  ]
}
{
  "id": 1,
  "property": "changed val",
  "children": [
    {
      "id": 1,
      "property": "some val",
      "parentId": 1
    },
    {
      "id": 2,
      "property": "some val",
      "parentId": 1
    },
    {
      "id": 3,
      "property": "changed val",
      "parentId": 1
    },
    {
      "property": "new child val"
    }
  ]
}
detached entity passed to persist: Child