У меня есть однонаправленное отношение «один ко многим» родитель-потомок. В моем тестовом примере у меня есть 1 родитель с 2 дочерними элементами, которые вставляются через каскадную вставку.
Глядя на выполненные запросы, у меня есть 1 вставка для родителя, 1 вставка и два запроса на обновление для каждого из дочерних элементов. Обновления для внешнего ключа - они устанавливают столбец 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);
Можно ли не иметь запросов на обновление? Можно ли вставить всех дочерних элементов в один запрос?