Hibernate version:
* Hibernate Core 3.2.0.CR2
* Hibernate Annotation 3.2.0.CR1
* Hibernate Entity Manager 3.2.0.CR1
Mapping documents:
Annotated entity classes Parent and Child, in a Many to Many bidirectional relationship with Child being the owning side. These are as vanilla as you can get, but code available on request.
Code between emf.createEntityManager() and em.close():
Code:
em.getTransaction().begin();
Parent p = new Parent();
em.persist(p);
Child c = new Child(Arrays.asList(p));
em.persist(c);
em.getTransaction().commit();
em.merge(c);
Description of ProblemIn a Java 5 SE environment, which runs in an extended persistence context, executing the above code causes an exception when JPA/hibernate tries to modify the immutable list returned by Arrays.asList(). The standard says:
Quote:
If X is a managed entity, it is ignored by the merge operation
which obviously isn't happening.
Obviously, the merge above isn't necessary since it is all within the same persistence context, but in general what restrictions, if any, are put on the POJOs that you hand to the entity manager?
Full stack trace of any exception that occurs:Code:
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
at java.util.AbstractList.removeRange(Unknown Source)
at java.util.AbstractList.clear(Unknown Source)
at org.hibernate.collection.PersistentBag.clear(PersistentBag.java:344)
at org.hibernate.type.CollectionType.replaceElements(CollectionType.java:404)
at org.hibernate.type.CollectionType.replace(CollectionType.java:449)
at org.hibernate.type.TypeFactory.replace(TypeFactory.java:431)
at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:282)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:132)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:105)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:51)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:679)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:663)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:667)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:201)
at com.acompany.persistence.TestJPA.testMerge(TestJPA.java:60)