Вы можете указать Hibernate и любой другой реализации JPA каскадировать определенные операции, которые вы выполняете над сущностью, к связанным с ней дочерним сущностям. Единственное, что вам нужно сделать, - это определить тип операции, которую вы хотите каскадировать с дочерними объектами.
В следующем фрагменте кода показан пример, в котором я каскадно сохраняю операцию сохранения объекта Author для всех связанных объектов Book.
@Entity
public class Author {
…
@ManyToMany(mappedBy=”authors”, cascade = CascadeType.PERSIST)
private List<Book> books = new ArrayList<Book>();
…
}
Когда вы сейчас создаете нового Автора и несколько связанных сущностей Книги, вам просто нужно сохранить сущность Автора.
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Author a = new Author();
a.setFirstName(“John”);
a.setLastName(“Doe”);
Book b1 = new Book();
b1.setTitle(“John’s first book”);
a.getBooks().add(b1);
Book b2 = new Book();
b2.setTitle(“John’s second book”);
a.getBooks().add(b2);
em.persist(a);
em.getTransaction().commit();
em.close();
Как вы можете видеть в выходных данных журнала, Hibernate каскадно связывает операцию со связанными сущностями Book и также сохраняет их.
15:44:28,140 DEBUG [org.hibernate.SQL] – insert into Author (firstName, lastName, version, id) values (?, ?, ?, ?)
15:44:28,147 DEBUG [org.hibernate.SQL] – insert into Book (publisherid, publishingDate, title, version, id) values (?, ?, ?, ?, ?)
15:44:28,150 DEBUG [org.hibernate.SQL] – insert into Book (publisherid, publishingDate, title, version, id) values (?, ?, ?, ?, ?)