JPA / Hibernate eliminando entidades "hijo"
Tengo dos clases de entidadA yB que existen en una relación bidireccional de uno a muchos respectivamente.
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;
En una aplicación de consola simple obtengo una específicaA fila de la base de datos e intenta eliminar uno de sus detallesB filas (al azar) peroJPA / Hibernate no solo elimina la fila, sino que ni siquiera emiteBORRAR Declaraciones hacia la base de datos. La única manera de eliminar elB fila es eliminando la entidad correspondiente de la colección (LinkedHashSet) deA.java. Entonces, si bien tengo una solución alternativa, me gustaría entender por qué falla el siguiente código, ¡y también falla silenciosamente!
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();
}