These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: How can I duplicate a graph of objects to save several times
PostPosted: Tue May 29, 2007 4:24 am 
Newbie

Joined: Wed Aug 30, 2006 3:09 am
Posts: 7
Hibernate version: Hibernate 3.1.3
Name and version of the database you are using: Firebird 1.5

Hi,

How can I duplicate a graph of objects to save several times in database with different identifiers?

I'm trying duplicate an object that has several child collections.
Before saving, I set the id to null in all the objects that I want to save. I'm using an id sequence generator for all of them in the mappings.

When I try to save the object I get an excepction like:

Code:
Caused by: org.hibernate.AssertionFailure: null identifier
        at org.hibernate.engine.EntityKey.<init>(EntityKey.java:39)
        at org.hibernate.engine.StatefulPersistenceContext.reassociateProxy(StatefulPersistenceContext.java:508)
        at org.hibernate.engine.StatefulPersistenceContext.unproxyAndReassociate(StatefulPersistenceContext.java:558)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:66)
        at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
        at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:218)
        at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
        at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
        at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
        at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
        at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
        at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
        at $Proxy0.save(Unknown Source)
        at com.psleuropa.paco.models.common.handlers.decla.DeclaracionDECLAHandler.save(DeclaracionDECLAHandler.java:126)
        ... 10 more


I don't understand this exception if I use an id generator.
How can I resolve this problem?

Thanks.


Top
 Profile  
 
 Post subject: Re: How can I duplicate a graph of objects to save several times
PostPosted: Fri Jan 22, 2010 6:07 am 
Newbie

Joined: Sun Aug 30, 2009 10:07 am
Posts: 3
Hi
Id of persist object can not be null if you whant a duplicate instance you can use celon() to get a new instance
or use sesion.evict(yourObject) and next set its id to null.
if your persist object have ManyToMany or OneToMany Relation befor saveing it you shuld renew this relation.
for example calss A has ManyToMany relation whit calss B
class A imp Cloneable{
@ManyToMany()
private Set<B> b_Collection;
}

A a1= new A();
session.save(a1);//first insert
session.evict(a1);
a1.setId(null);
session.save(a1);//sec Insert

or
A a1= new A();
session.save(a1);//first insert
A a2=a1.clone();
a2.setId(null);
a2.setB_Collection(new HasSet(a1.getB_Collection));
session.save(a2);//sec Insert


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.