|
|
|
Re: Teneo Problems using merge HbMapperException [message #759368 is a reply to message #759354] |
Mon, 28 November 2011 13:45 |
Martin Taal Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Jean-Louis,
Can you enter a bugzilla with this info? I will do my best to take a look (few days..), note that if your object has
been read by the same entitymanager instance then you don't need to do merge, it will automatically be saved at
commit/flush.
gr. Martin
On 11/28/2011 02:28 PM, Jean-Louis wrote:
> Hi Martin! :)
>
> I'm using a singleton to get an EntityManager to persist/merge an object, so I'm getting the entitymanager using
> EntityManagerFactory.createEntityManager(). I persist the object in database when is not persisted and merge the object
> if he already exist (is persisted) in database. The exception throwed occur when I try to merge but when i save there
> are no problem.
> It's not easy to reproduce the problem in minor project, but here are a little example:
>
> public CarStore save(CarStore object) {
> RootContainer rootContainer = object.getRootContainer();
>
> System.out.println("RootContainer this:" + rootContainer);
> System.out.println("RootContainer id:" + rootContainer.getId());
>
> if (rootContainer.getId() == null) {
> System.out.println("persist");
> entityManager.persist(rootContainer);
> } else {
> System.out.println("merge");
> entityManager.merge(rootContainer);
> }
>
> return null;
> }
>
>
> By the stacktrace can you see something strange?
>
> org.eclipse.emf.teneo.hibernate.HbMapperException: Type java.util.ArrayList can not be used as a replacement for elist
> EList of type: org.eclipse.emf.teneo.hibernate.mapping.elist.HibernatePersistableEList of member
> inInnerCardPortConnections owned by my.domain.datamodel.model.eqm.impl.CardPortImpl with delegate list java.util.ArrayList
> at
> org.eclipse.emf.teneo.hibernate.mapping.elist.HibernatePersistableEList.replaceDelegate(HibernatePersistableEList.java:246)
> at org.eclipse.emf.teneo.hibernate.mapping.property.EListPropertyHandler.set(EListPropertyHandler.java:425)
> at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:583)
> at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3822)
> at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:299)
> at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
> at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
> at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:62)
> at org.hibernate.event.def.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:415)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:341)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:630)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:287)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:261)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:630)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:287)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:261)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855)
> at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:686)
> at org.eclipse.emf.teneo.hibernate.HbEntityDataStore$WrappedEntityManager.merge(HbEntityDataStore.java:606)
> at my.domain.dbservices.daos.NetworkDaoImpl.save(NetworkDaoImpl.java:54)
> at de.siemens.spt.editor.NetworkEditor$7.run(NetworkEditor.java:1595)
> at java.lang.Thread.run(Thread.java:662)
> org.eclipse.emf.teneo.hibernate.HbMapperException: The field inInnerCardPortConnections can not be set using object
> java.util.ArrayList on target my.domain.datamodel.model.eqm.impl.CardPortImpl
> at org.eclipse.emf.teneo.hibernate.mapping.property.EListPropertyHandler.set(EListPropertyHandler.java:457)
> at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:583)
> at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3822)
> at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:299)
> at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
> at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
> at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:62)
> at org.hibernate.event.def.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:415)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:341)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450)
> at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:336)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:630)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:287)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:261)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
> at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:630)
> at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:287)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:261)
> at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855)
> at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:686)
> at org.eclipse.emf.teneo.hibernate.HbEntityDataStore$WrappedEntityManager.merge(HbEntityDataStore.java:606)
> at my.domain.dbservices.daos.NetworkDaoImpl.save(NetworkDaoImpl.java:54)
> at de.siemens.spt.editor.NetworkEditor$7.run(NetworkEditor.java:1595)
> at java.lang.Thread.run(Thread.java:662)
>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Cell: +31 (0)6 288 48 943
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
|
Powered by
FUDForum. Page generated in 0.03386 seconds