JPA / Hibernate removendo entidades "filho"
Eu tenho duas classes de entidadeA eB que existem em um relacionamento um-para-muitos bidirecional, 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;
Em um simples aplicativo de console, eu obtenho umA linha do banco de dados e tente excluir um dos seus detalhesB linhas (aleatoriamente), masJPA / Hibernate não apenas remove a linha - ela nem mesmo emiteEXCLUIR declarações para o banco de dados. A única maneira de remover oB linha é removendo a entidade correspondente da coleção (LinkedHashSet) doA.java. Então, enquanto eu tenho uma solução, eu gostaria de entender por que o código abaixo falha, e falha silenciosamente também!
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();
}