package; import javax.persistence.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class TestCascade { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory( "objectdb:$objectdb/db/test.tmp;drop"); EntityManager em = emf.createEntityManager(); setUp(em); final TypedQuery
addressQuery = em.createQuery("select from Address", Address.class); System.out.println(addressQuery.getResultList()); em.getTransaction().begin(); Employee emp1 = em.find(Employee.class, 1); System.out.println(emp1); em.remove(emp1); em.getTransaction().commit(); System.out.println("After commit :"); System.out.println(addressQuery.getResultList()); System.out.println(em.find(Employee.class, 1)); System.out.println(em.find(Employee.class, 2)); System.out.println("Done"); } private static void setUp(EntityManager em) { em.getTransaction().begin(); List addresses = new ArrayList<>(); for (int i = 1; i < 6; i++) { Address address = new Address(i, String.format("name_%d", i)); em.persist(address); addresses.add(address); } Employee employee1 = new Employee(1); Set a1 = new HashSet<>(); a1.add(addresses.get(3)); a1.add(addresses.get(4)); a1.add(addresses.get(1)); employee1.setAddresses(a1); em.persist(employee1); Employee employee2 = new Employee(2); Set a2 = new HashSet<>(); a2.add(addresses.get(1)); a2.add(addresses.get(2)); employee2.setAddresses(a2); em.persist(employee2); em.getTransaction().commit(); } @Entity public static class Employee { @Id private int id; public Employee(int id) { this.id = id; } @OneToMany(orphanRemoval = true) private Set addresses; public void setAddresses(Set addresses) { this.addresses = addresses; } @Override public String toString() { return "Employee{" + "id=" + id + ", addresses=" + addresses + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Employee)) return false; Employee employee = (Employee) o; if (id != employee.id) return false; return true; } @Override public int hashCode() { return id; } } @Entity public static class Address { @Id @GeneratedValue private int id; private String name; public Address(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Address{" + "name='" + name + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Address)) return false; Address address = (Address) o; if (id != address.id) return false; return true; } @Override public int hashCode() { return id; } } }