Hello,
I've encountered a strange error when trying to update a teneo
hibernated object using Session.merge(). I am using Teneo 1.0.1,
but would be open to upgrading if it would help.
Take the following model:
- Abstract EClass Baz
- EClass Foo
- has multi-valued containment reference 'bars' of type Bar
- extends Baz
- EClass Bar
- extends Baz
When I do the following:
(1) Create 'foo' on the server, and save it to the DB using
session.save(foo);
(2) Send 'foo' to the client.
(3) Add new Bar 'bar' to foo.bars on the client.
(4) Send 'foo' back to the server (along with 'bar', via containment).
(5) Update foo in the DB by calling session.merge(foo)
I get the following exception:
java.lang.IllegalArgumentException: The class 'Baz' is not a valid
classifier
at
emf.com.stottlerhenke.adept.impl.AdeptFactoryImpl.create(AdeptFactoryImpl.java:130)
at
org.eclipse.emf.ecore.util.EcoreUtil.create(EcoreUtil.java:3169)
at
org.eclipse.emf.teneo.hibernate.tuplizer.EMFInstantiator.instantiate(EMFInstantiator.java:85)
at
org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:374)
at
org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3634)
at org.hibernate.type.EntityType.replace(EntityType.java:278)
at org.hibernate.type.AbstractType.replace(AbstractType.java:177)
at org.hibernate.type.TypeFactory.replace(TypeFactory.java:538)
at
org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:429)
at
org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:231)
at
org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:714)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:696)
at
org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:268)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
at
org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:319)
at
org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:265)
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:242)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
at
org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:459)
at
org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:318)
at
org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:167)
at
org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:81)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:704)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:688)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:692)
at
com.stottlerhenke.adept.server.DataModelServer.updateFoo(DataModelServer.java:443)
The exception seems to occur when processing the new reference to
'bar', and the fact that the reference is multi-valued and
containment appears to be important.
Any idea where I might be going wrong?
Thanks,
Daniel