JPA / Hibernate - Entfernen von "untergeordneten" Entitäten

Ich habe zwei EntitätsklassenA undB die jeweils in einer bidirektionalen Eins-zu-Viele-Beziehung existieren.

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;

In einer einfachen Konsolenanwendung erhalte ich eine bestimmteA Zeile aus der Datenbank und versuchen Sie, eines seiner Details zu löschenB Reihen (zufällig) aberJPA / Hibernate Entfernt nicht nur die Zeile, sondern gibt auch keine ausLÖSCHEN Aussagen gegenüber der Datenbank. Der einzige Weg, um die zu entfernenB Zeile ist durch Entfernen der entsprechenden Entität aus der Sammlung (LinkedHashSet) vonA.java. Während ich eine Problemumgehung habe, möchte ich verstehen, warum der folgende Code fehlschlägt und auch im Hintergrund!

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();
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage