Java JPA单向OneToMany插入或更新父级,子级来自JSON
我想写一个方法,当给定对象的父对象和子对象在数据库中不存在时插入它们,或者当id不为null时更新它 例如: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;
@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