This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes Object Relational Mapping and the fly likes Caught a NonUnique Exception while adding more rows to the table. Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "Caught a NonUnique Exception while adding more rows to the table." Watch "Caught a NonUnique Exception while adding more rows to the table." New topic
Author

Caught a NonUnique Exception while adding more rows to the table.

Amith Bhavikatti
Greenhorn

Joined: Oct 27, 2006
Posts: 26
Hi All,

I am trying to insert many rows to database and delete many rows from database using hibernate sessions.but if i enter some 4 rows it will work fine,but if i enter many rows(say 10) it is giving this exception.
Please help me...
Thanks in Advance.....
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.bvn.finance.services.treatment.collectors.Collector#12]
at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:556)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:258)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:216)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:502)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:494)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.engine.Cascade.cascade(Cascade.java:223)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:331)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:303)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:216)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:502)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:494)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:385)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:242)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)


Amith Bhavikatti
Greenhorn

Joined: Oct 27, 2006
Posts: 26
Help me Guys................
Javid Jamae
Author
Ranch Hand

Joined: May 14, 2008
Posts: 198
What happens when you take the flush and evict calls out?


Author: JBoss in Action, javidjamae.com, @javidjamae on Twitter
Amith Bhavikatti
Greenhorn

Joined: Oct 27, 2006
Posts: 26
Hi Javid,

Thanks for your reply.
I have modified my code but still that exception comes randomly any time.
Please suggest me.
Here is my code:
<code>
public void insDelAssignmentByLetters(ArrayList delAssignmentByLetterList,ArrayList addingtoAssignmentByLetterList,String remoteUsername)
{
if(log.isDebugEnabled()) log.debug("entering addAssignmentByLetters()....");
Session session = HibernateUtil.getCurrentUtil().getCurrentSession();
Transaction tx = session.beginTransaction();
try
{
for ( int i=0; i< delAssignmentByLetterList.size(); i++)
{
AssignmentByLetter delAssignList = (AssignmentByLetter) delAssignmentByLetterList.get(i);
deleteAsgLetter(delAssignList,remoteUsername,session);
}

for ( int i=0; i< addingtoAssignmentByLetterList.size(); i++)
{
AssignmentByLetter addingAssignmentByLettersList = (AssignmentByLetter) addingtoAssignmentByLetterList.get(i);
insertToAsgLetter(addingAssignmentByLettersList,remoteUsername,session);
}
}
catch(HibernateException ex)
{
log.error("Caught a hibernate exception while adding AssignmentByLetter.",ex);
throw new DataAccessException("addAssignmentByLetters","AssignmentByLetter");
}

finally
{
tx.commit();
session.close();
}

}

private void deleteAsgLetter(AssignmentByLetter deleteAssignObj,String remoteUsername,Session session){

try
{
if(log.isDebugEnabled()) log.debug("Remote UserName : "+remoteUsername);
if(log.isDebugEnabled()) log.debug("Deleting From AssignmentByLetter Table..."+ "AssignmentID --> " + deleteAssignObj.getAssignmentID());
session.getNamedQuery("deleteAssignmentByLetter").setInteger("assignmentIDD",deleteAssignObj.getAssignmentID()).executeUpdate();
}
catch(HibernateException ex)
{
log.error("Caught a hibernate exception in deleteAsgLetter(): ",ex);
throw new DataAccessException("deleteAsgLetter","AssignmentByLetter");
}
}

private void insertToAsgLetter(AssignmentByLetter insertObj,String remoteUsername,Session session)
{

try{
if(log.isDebugEnabled()) log.debug("entering insertToAsgLetter()....");
if(log.isDebugEnabled()) log.debug("Remote UserName : "+remoteUsername);
if(log.isDebugEnabled()) log.debug("Inserting into AssignmentByLetter Table..."+ "StartValue --> " + insertObj.getStartValue());
if(log.isDebugEnabled()) log.debug("Inserting into AssignmentByLetter Table..."+ "EndValue --> " + insertObj.getEndValue());
if(log.isDebugEnabled()) log.debug("Inserting into AssignmentByLetter Table..."+ "CollectorId --> " + insertObj.getCollector().getCollectorID());
if(log.isDebugEnabled()) log.debug("Inserting into AssignmentByLetter Table..."+ "GroupId --> " + insertObj.getGroup().getGroupID());
insertObj.setCreated(new Date());
session.saveOrUpdate(insertObj);
}
catch(HibernateException ex)
{
log.error("Caught a hibernate exception in insertToAsgLetter(): ",ex);
throw new DataAccessException("insertToAsgLetter","AssignmentByLetter");
}

}
</code>
Javid Jamae
Author
Ranch Hand

Joined: May 14, 2008
Posts: 198
Amith, please fix your code block in your last e-mail.

-Are you perhaps creating a new SessionFactory for each user or unit of work?
-Are you hitting this error when multiple users/threads are on the system?
-Do you have anything else that might be writing data into that table?
-Can you show us the mapping file and what key generation strategy you're using?
-What database are you using?
Amith Bhavikatti
Greenhorn

Joined: Oct 27, 2006
Posts: 26
Hi Javid,

I am using singleton on sessionFactory.
I am getting this error for a single user login.
no only delete and insert.
This is the mapping file code


And this is the code written to delete and insert into database.
 
Don't get me started about those stupid light bulbs.
 
subject: Caught a NonUnique Exception while adding more rows to the table.
 
Similar Threads
org.hibernate.exception.ConstraintViolationException
hibernate 1-many error
many side of one to many not being populated
problem with hibernate
java.lang.OutOfMemoryError: Java heap space