Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
I'm working on application that will be deployed on Weblogic 8. I'm using dataSource (see Hibernate config file). The probelm is when I try to add my object (BOM) BOMDAO.add(bom), i'm getting org.hibernate.NonUniqueObjectException. When I use direct connection to DB this exception disappears.
I Followd the steps mentioned in Hibernate documentation for CMT it doesn't work.
Hibernate version:3
Here's my object's mapping file:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
>
<class
name="com.mot.edc.cia.model.BOM"
table="BOM"
>
<id
name="id"
column="BOM_ID"
type="long"
>
<generator class="native">
<!--
To add non XDoclet generator parameters, create a file named
hibernate-generator-params-BOM.xml
containing the additional parameters and place it in your merge dir.
-->
</generator>
</id>
<many-to-one
name="laptopFiles"
class="com.mot.edc.cia.model.LaptopFiles"
cascade="save-update"
outer-join="auto"
update="true"
insert="true"
unique="true"
column="LAPTOPFILES_ID"
not-null="false"
/>
<many-to-one
name="pdaFiles"
class="com.mot.edc.cia.model.PDAFiles"
cascade="save-update"
outer-join="auto"
update="true"
insert="true"
unique="true"
column="PDAFILES_ID"
not-null="false"
/>
<property
name="description"
type="java.lang.String"
update="true"
insert="true"
column="FILE_DESC"
not-null="true"
/>
<property
name="fileContent"
type="blob"
update="true"
insert="true"
column="FILE_CONTENT"
not-null="true"
lazy="true"
/>
</class>
</hibernate-mapping>
my hibernate configuration :
Mapping documents:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.connection.datasource">hibernateDS</property>
<property name="transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
<property name="transaction.manager_lookup_class">org.hibernate.transaction.WeblogicTransactionManagerLookup</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>
<property name="hibernate.connection.autocommit">false</property>
<property name="hibernate.transaction.flush_before_completion">true</property>
<property name="hibernate.connection.release_mode">auto</property>
<property name="hibernate.transaction.auto_close_session">auto</property>
<!-- property name="hibernate.session_factory_name">java:hibernate/SessionFactory</property>
<property name="jndi.url">10.32.81.59:7011</property>
<property name="jndi.class">weblogic.jndi.WLInitialContextFactory</property-->
<mapping resource="Vendor.hbm.xml"/>
<mapping resource="Bundle.hbm.xml"/>
<mapping resource="BOM.hbm.xml"/>
<mapping resource="BOMAssignment.hbm.xml"/>
<mapping resource="BOMFile.hbm.xml"/>
<mapping resource="ReleasedFile.hbm.xml"/>
<mapping resource="School.hbm.xml"/>
<mapping resource="SalesRepAccount.hbm.xml"/>
<mapping resource="VendorConfigurationInfo.hbm.xml"/>
<mapping resource="EDCForm.hbm.xml"/>
<mapping resource="LaptopFiles.hbm.xml"/>
<mapping resource="PDAFiles.hbm.xml"/>
<mapping resource="PostDeploymentExeFiles.hbm.xml"/>
<!--mapping resource="Event.hbm.xml"/>
<mapping resource="EventLocation.hbm.xml"/-->
</session-factory>
</hibernate-configuration>
Code between sessionFactory.openSession() and session.close():
public class BOMDAO
{
Session session = null;
Transaction transaction = null;
/**
* Add new BOM
* @param bom
*/
public Long addBom(BOM bom){
Long createdId = null;
try{
startTransaction();
createdId = (Long)session.save(bom);
commitTransaction();
}catch (HibernateException ex){
throw new InfrastructureException(ex);
}
return createdId;
}
/**
* Begin a new transaction
*/
private void startTransaction() {
SessionFactory sF = new Configuration().configure() .buildSessionFactory();
session = sF.openSession();
transaction = session.beginTransaction();
}
/**
* Commit current transaction and close the session
*/
public void commitTransaction(){
transaction.commit();
session.flush();
session.close();
}
}
Full stack trace of any exception that occurs:javax.faces.FacesException: #{ejbClientDelegateController.submitBOM}: javax.faces.el.EvaluationException: javax.ejb.EJBException: EJB Exception: : com.mot.edc.cia.exceptions.InfrastructureException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.mot.edc.cia.model.ReleasedFile#com.mot.edc.cia.model.ReleasedFileCompId@3ea3678]
at com.mot.edc.cia.dao.BOMDAO.addBom(BOMDAO.java:55)
at com.mot.edc.cia.ejb.releaseManager.ReleaseManagerImpl.submitBOM(ReleaseManagerImpl.java:255)
at com.mot.edc.cia.ejb.releaseManager.ReleaseManagerBean_yrgv2s_ELOImpl.submitBOM(ReleaseManagerBean_yrgv2s_ELOImpl.java:208)
at com.mot.edc.cia.view.common.action.EJBClientDelegateController.submitBOM(EJBClientDelegateController.java:80)
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:324)
at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
at javax.faces.component.UICommand.broadcast(UICommand.java:312)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.mot.edc.cia.view.releasemanager.managedbean.bomupload.UploadFilter.doFilter(UploadFilter.java:98)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6724)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3764)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2644)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.mot.edc.cia.model.ReleasedFile#com.mot.edc.cia.model.ReleasedFileCompId@3ea3678]
at org.hibernate.engine.PersistenceContext.checkUniqueness(PersistenceContext.java:586)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:254)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:214)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:91)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:468)
at org.hibernate.engine.Cascades$5.cascade(Cascades.java:154)
at org.hibernate.engine.Cascades.cascadeAssociation(Cascades.java:771)
at org.hibernate.engine.Cascades.cascade(Cascades.java:720)
at org.hibernate.engine.Cascades.cascade(Cascades.java:847)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:332)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:214)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:96)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:468)
at org.hibernate.engine.Cascades$5.cascade(Cascades.java:154)
at org.hibernate.engine.Cascades.cascadeAssociation(Cascades.java:771)
at org.hibernate.engine.Cascades.cascade(Cascades.java:720)
at org.hibernate.engine.Cascades.cascadeCollection(Cascades.java:895)
at org.hibernate.engine.Cascades.cascadeAssociation(Cascades.java:792)
at org.hibernate.engine.Cascades.cascade(Cascades.java:720)
at org.hibernate.engine.Cascades.cascade(Cascades.java:847)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:363)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:96)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:468)
at org.hibernate.engine.Cascades$5.cascade(Cascades.java:154)
at org.hibernate.engine.Cascades.cascadeAssociation(Cascades.java:771)
at org.hibernate.engine.Cascades.cascade(Cascades.java:720)
at org.hibernate.engine.Cascades.cascade(Cascades.java:847)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:332)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:214)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:481)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)
at com.mot.edc.cia.dao.BOMDAO.addBom(BOMDAO.java:51)
... 29 more
; nested exception is: com.mot.edc.cia.exceptions.InfrastructureException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.mot.edc.cia.model.ReleasedFile#com.mot.edc.cia.model.ReleasedFileCompId@3ea3678]
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
at javax.faces.component.UICommand.broadcast(UICommand.java:312)
Name and version of the database you are using:
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt: