我有单向,一对多的父/子关系。 在我的测试用例中,我有1个父项,有2个孩子,通过级联插入插入。
查看运行的查询,我为每个子项设置了1个插入,1个插入和2个更新查询。外键的更新 - 它们在子表中设置parent_id列,但我可以看到插入已经正确设置了parent_id。
这是一个例子
@Entity
@Table(name = "PARENT")
public class Parent
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long parentId;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id", nullable=false)
private List<Child> children;
}
@Entity
@Table(name = "CHILD")
public class Child
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "PARENT_ID")
private Long parentId;
//some other field
}
//The test looks like this
Parent parent = new Parent();
Child child1 = new Child();
Child child2 = new Child();
//set all fields
parent.addChild(child1);
parent.addChild(child2);
em.merge(parent);
是否可以不进行更新查询? 是否可以在一个查询中插入所有子项?
答案 0 :(得分:1)
您可以尝试使用persist
代替merge
答案 1 :(得分:-1)
没有。这不可能。因为在父表中插入后,可以插入子表。