java - UnsupportedOperationException when merging an existing Hibernate model object? -


after upgrade hibernate 3 4, we're working through few kinks popped along way. 1 has particularly stumped unsupportedoperationexception, existing object pulled database, tweaked, , merged.

the problem hibernate appears adding object abstractlist

this seems happen 1 particular object type, when saved in our dao, best can tell:

  1. we're not using sublist() or aslist() methods cause immutable instance created.
  2. examining object that's being saved (which enormous , has many children) don't think of children items abstractlist types.

here code snippets around stack points:

hibernatedao.save():

@transactional public void save(t item) {     try {         getsessionfactory().getcurrentsession().merge(item);     } catch (exception ex) {         logger.debug("unable merge", ex);         logger.warn("unable merge item, saving instead. (of type " + item.getclass() + ")");         getsessionfactory().getcurrentsession().saveorupdate(item);     } } 

our user item, being saved, has number of children items defined so:

@onetomany(cascade = cascadetype.all) @lazycollection(lazycollectionoption.false) private map<string, project> associatedprojects = new hashmap<string, project>(); 

the project class has other similarly-annotated children, has cascadetype.all, , lazycollectionoption.false defined.

here (quite tall) stack trace:

note our code begins com.company.application

06/04 18:15:45 debug [thread-19258] hibernate.hibernatedao.save- unable merge java.lang.unsupportedoperationexception         @ java.util.abstractlist.add(abstractlist.java:148)         @ java.util.abstractlist.add(abstractlist.java:108)         @ org.hibernate.collection.internal.persistentbag.add(persistentbag.java:292)         @ org.hibernate.type.collectiontype.replaceelements(collectiontype.java:496)         @ org.hibernate.type.collectiontype.replace(collectiontype.java:563)         @ org.hibernate.type.abstracttype.replace(abstracttype.java:178)         @ org.hibernate.type.typehelper.replaceassociations(typehelper.java:261)         @ org.hibernate.event.internal.defaultmergeeventlistener.copyvalues(defaultmergeeventlistener.java:398)         @ org.hibernate.event.internal.defaultmergeeventlistener.entityistransient(defaultmergeeventlistener.java:221)         @ org.hibernate.event.internal.defaultmergeeventlistener.entityisdetached(defaultmergeeventlistener.java:282)         @ org.hibernate.event.internal.defaultmergeeventlistener.onmerge(defaultmergeeventlistener.java:151)         @ org.hibernate.internal.sessionimpl.firemerge(sessionimpl.java:914)         @ org.hibernate.internal.sessionimpl.merge(sessionimpl.java:896)         @ org.hibernate.engine.spi.cascadingaction$6.cascade(cascadingaction.java:288)         @ org.hibernate.engine.internal.cascade.cascadetoone(cascade.java:380)         @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:323)         @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:208)         @ org.hibernate.engine.internal.cascade.cascadecollectionelements(cascade.java:409)         @ org.hibernate.engine.internal.cascade.cascadecollection(cascade.java:350)         @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:326)         @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:208)         @ org.hibernate.engine.internal.cascade.cascade(cascade.java:165)         @ org.hibernate.event.internal.defaultmergeeventlistener.cascadeonmerge(defaultmergeeventlistener.java:439)         @ org.hibernate.event.internal.defaultmergeeventlistener.entityisdetached(defaultmergeeventlistener.java:308)         @ org.hibernate.event.internal.defaultmergeeventlistener.onmerge(defaultmergeeventlistener.java:151)         @ org.hibernate.internal.sessionimpl.firemerge(sessionimpl.java:914)         @ org.hibernate.internal.sessionimpl.merge(sessionimpl.java:896)         @ org.hibernate.engine.spi.cascadingaction$6.cascade(cascadingaction.java:288)         @ org.hibernate.engine.internal.cascade.cascadetoone(cascade.java:380)         @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:323)         @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:208)         @ org.hibernate.engine.internal.cascade.cascadecollectionelements(cascade.java:409)         @ org.hibernate.engine.internal.cascade.cascadecollection(cascade.java:350)         @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:326)         @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:208)         @ org.hibernate.engine.internal.cascade.cascade(cascade.java:165)         @ org.hibernate.event.internal.defaultmergeeventlistener.cascadeonmerge(defaultmergeeventlistener.java:439)         @ org.hibernate.event.internal.defaultmergeeventlistener.entityisdetached(defaultmergeeventlistener.java:308)         @ org.hibernate.event.internal.defaultmergeeventlistener.onmerge(defaultmergeeventlistener.java:151)         @ org.hibernate.internal.sessionimpl.firemerge(sessionimpl.java:914)         @ org.hibernate.internal.sessionimpl.merge(sessionimpl.java:896)         @ org.hibernate.engine.spi.cascadingaction$6.cascade(cascadingaction.java:288)         @ org.hibernate.engine.internal.cascade.cascadetoone(cascade.java:380)         @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:323)         @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:208)         @ org.hibernate.engine.internal.cascade.cascadecollectionelements(cascade.java:409)         @ org.hibernate.engine.internal.cascade.cascadecollection(cascade.java:350)         @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:326)         @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:208)         @ org.hibernate.engine.internal.cascade.cascade(cascade.java:165)         @ org.hibernate.event.internal.defaultmergeeventlistener.cascadeonmerge(defaultmergeeventlistener.java:439)         @ org.hibernate.event.internal.defaultmergeeventlistener.entityisdetached(defaultmergeeventlistener.java:308)         @ org.hibernate.event.internal.defaultmergeeventlistener.onmerge(defaultmergeeventlistener.java:151)         @ org.hibernate.event.internal.defaultmergeeventlistener.onmerge(defaultmergeeventlistener.java:76)         @ org.hibernate.internal.sessionimpl.firemerge(sessionimpl.java:904)         @ org.hibernate.internal.sessionimpl.merge(sessionimpl.java:888)         @ org.hibernate.internal.sessionimpl.merge(sessionimpl.java:892)         @ com.company.hibernate.hibernatedao.save(hibernatedao.java:129)         @ sun.reflect.generatedmethodaccessor62.invoke(unknown source)         @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)         @ java.lang.reflect.method.invoke(method.java:601)         @ org.springframework.aop.support.aoputils.invokejoinpointusingreflection(aoputils.java:318)         @ org.springframework.aop.framework.reflectivemethodinvocation.invokejoinpoint(reflectivemethodinvocation.java:183)         @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:150)         @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:106)         @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172)         @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:202)         @ $proxy53.save(unknown source)         @ com.company.application.usermanager.save(usermanager.java:46)         @ sun.reflect.generatedmethodaccessor67.invoke(unknown source)         @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)         @ java.lang.reflect.method.invoke(method.java:601)         @ org.springframework.aop.support.aoputils.invokejoinpointusingreflection(aoputils.java:318)         @ org.springframework.aop.framework.reflectivemethodinvocation.invokejoinpoint(reflectivemethodinvocation.java:183)         @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:150)         @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:106)         @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172)         @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:202)         @ $proxy66.save(unknown source)         @ com.company.application.useroperationcontroller.saveuser(useroperationcontroller.java:533) 

we're not sure abstractlist coming from, or how we're responsible. there potential pitfalls when working hibernate 4 (this issue new since upgrade) result in partially-unmodifiable objects? or cause hibernate act in way results in attempting create unmodifiable instances of objects?

@onetomany(cascade = cascadetype.all) @lazycollection(lazycollectionoption.false) private map associatedprojects = new hashmap();

how add this.

@onetomany(cascade = cascadetype.all)

*@joincolumn(name="")*

@lazycollection(lazycollectionoption.false) private map associatedprojects = new hashmap();


Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -