Hello!
When the JPA entities are not enhanced the removal of an entry from a @OneToMany collection is not possible. The following java code demonstrates the problem. The statement
parentEntity.getChildEntityContainer().remove("01");
does not work correctly with not enhanced JPA entities.
package objectdb.examples; import java.util.HashMap; import java.util.Map; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.FetchType; import javax.persistence.OneToMany; import javax.persistence.Persistence; import org.junit.Assert; public final class ChildEntityRemoveProblem { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("objectdb:$objectdb/db/test.tmp;drop"); EntityManager entityManager = emf.createEntityManager(); ParentEntity parentEntity = new ParentEntity(); entityManager.getTransaction().begin(); entityManager.persist(parentEntity); entityManager.getTransaction().commit(); entityManager.getTransaction().begin(); ChildEntity childEntity = new ChildEntity(); childEntity.setStringAttribute1("abc"); parentEntity.getChildEntityContainer().put("01", childEntity); entityManager.flush(); entityManager.remove(parentEntity.getChildEntityContainer().get("01")); parentEntity.getChildEntityContainer().remove("01"); entityManager.flush(); entityManager.getTransaction().commit(); entityManager.clear(); parentEntity = entityManager.find(ParentEntity.class, 1l); Assert.assertEquals(0, parentEntity.getChildEntityContainer().size()); entityManager.close(); emf.close(); } @Entity public static class ChildEntity { @Column private String stringAttribute1; public String getStringAttribute1() { return stringAttribute1; } public void setStringAttribute1(String stringAttribute1) { this.stringAttribute1 = stringAttribute1; } } @Entity public static class ParentEntity { @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private Map<String, ChildEntity> childEntityContainer = new HashMap<String, ChildEntityRemoveProblem.ChildEntity>(); public Map<String, ChildEntity> getChildEntityContainer() { return childEntityContainer; } } }