Usuwanie JPA / Hibernate „podrzędnych” jednostek

Mam dwie klasy jednostekA iB które istnieją odpowiednio w dwukierunkowej relacji jeden-do-wielu.

A.java:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "aId",
           fetch=FetchType.EAGER, orphanRemoval=true)
private Set<B> bCollection = new LinkedHashSet<B>();

B.java

  @JoinColumn(name = "A_ID", referencedColumnName = "ID", nullable=false)
  @ManyToOne(optional = false)   
  private A aId;

W prostej aplikacji konsoli otrzymuję konkretnąA wiersz z bazy danych i spróbuj usunąć jeden z jego szczegółówB wiersze (losowo), aleJPA / Hibernate nie tylko usuwa wiersz - nawet go nie emitujeKASOWAĆ oświadczenia do bazy danych. Jedyny sposób na usunięcieB wiersz polega na usunięciu odpowiedniego elementu z kolekcji (LinkedHashSet) zA.java. Tak więc, chociaż mam obejście problemu, chciałbym zrozumieć, dlaczego poniższy kod zawodzi i cicho też zawodzi!

public static void main(String[] args) {
    EntityManagerFactory entityManagerFactory =  Persistence.createEntityManagerFactory("testjpa");
    EntityManager em = entityManagerFactory.createEntityManager();
    EntityTransaction entityTransaction = em.getTransaction();
    entityTransaction.begin();
    A a = em.find(A.class, 1);
    B b = getARandomChildOfA(a);
    em.remove(em.merge(b));     // simple em.remove(b) doesn't work either
    entityTransaction.commit();
    em.close();
    entityManagerFactory.close();
}

questionAnswers(1)

yourAnswerToTheQuestion