-->
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: TransientObjectException on merge
PostPosted: Thu Oct 16, 2008 12:11 pm 
Newbie

Joined: Sat Nov 17, 2007 8:42 pm
Posts: 2
Hello.

I have and object A (transient or detached) which has a collection of objects B. On this collections is specified cascade all. So I add some transient instances of B to collection of A and do:

merge(A);

, however I get TransientObjectException.

Details below.

I think I don't do anything worng. Thanks for suggestions.

Hibernate version: 3.2.4sp1

Mapping documents: Annotations mapping

Code:
@javax.persistence.Entity
@Table(name = "PRODUCT")
public class Product extends BaseEntity {

    @Basic
    @Column(name = "NAME")
    private String name;

    @OneToMany(mappedBy = "product", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private Set<LicensedEntity> licensedEntities;

    @Override
    public boolean equals(Object obj) {
        if(this == obj)
            return true;
        if(obj instanceof Product) {
            final Product other = (Product) obj;
            if(id != null && other.id != null && id.equals(other.id))
                return true;
            if(name.equals(other.name))
                return true;
        }
        return false;
    }

    public int hashCode() {
        int result = 5;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }

    public Product() { }
   
    public Product(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<LicensedEntity> getLicensedEntities() {
        if(licensedEntities == null) {
            licensedEntities = new HashSet<LicensedEntity>();
        }
        return licensedEntities;
    }

    public void setLicensedEntities(Set<LicensedEntity> licensedEntities) {
        this.licensedEntities = licensedEntities;
    }
}



Code:
@javax.persistence.Entity
@Table(name = "LICENSED_ENTITY", uniqueConstraints = {
    @UniqueConstraint( columnNames = { "CLASS_NAME", "PRODUCT_FK" })
})
public class LicensedEntity extends BaseEntity {

    @Basic
    @Column(name = "CLASS_NAME")
   private String className;
   
    @ManyToOne
    @JoinColumn(name = "PRODUCT_FK")
    private Product product;

   public LicensedEntity() { }

   public LicensedEntity(String className, Product product) {
      this.className = className;
        this.product = product;
   }

    @Override
    public boolean equals(Object obj) {
        if(this == obj)
            return true;
        if(obj instanceof LicensedEntity) {
            final LicensedEntity other = (LicensedEntity) obj;
            if(id != null && other.id != null && id.equals(other.id))
                return true;
            if(className.equals(other.className) && product.equals(other.product))
                return true;
        }
        return false;
    }

    public int hashCode() {
        int result = 3;
        result = 31 * result + (className != null ? className.hashCode() : 0);
        result = 31 * result + (product != null ? product.hashCode() : 0);
        return result;
    }

    public void setClassName(String className) {
      this.className = className;
   }

   public String getClassName() {
      return className;
   }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }
}


Code between sessionFactory.openSession() and session.close():
Code:
Product prod = getByName(newProd.getName());
if(prod == null)
    prod = new Product(newProd.getName());
prod.getLicensedEntities().addAll(newProd.getLicensedEntities());
for(Iterator it = prod.getLicensedEntities().iterator(); it.hasNext(); )
    if(!newProd.getLicensedEntities().contains(it.next()))
        it.remove();
merge(prod);


Full stack trace of any exception that occurs:
Code:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: x.y.model.Product
   at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
   at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
   at org.hibernate.type.EntityType.replace(EntityType.java:253)
   at org.hibernate.type.AbstractType.replace(AbstractType.java:153)
   at org.hibernate.type.TypeFactory.replace(TypeFactory.java:515)
   at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:377)
   at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:179)
   at org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener.entityIsTransient(IdTransferringMergeEventListener.java:64)
   at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:123)
   at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:687)
   at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:669)
   at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:245)
   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.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:407)
   at org.hibernate.event.def.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:152)
   at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:126)
   at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
   at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
   at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
   at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
   at org.jboss.seam.persistence.HibernateSessionProxy.merge(HibernateSessionProxy.java:316)
   at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.jboss.seam.ioc.spring.SeamManagedSessionFactoryBean$SeamManagedSessionHandler.invoke(SeamManagedSessionFactoryBean.java:297)
   at $Proxy75.merge(Unknown Source)
   at cz.bellman.common.dao.AbstractHibernateDao.merge(AbstractHibernateDao.java:84)
   at cz.bellman.common.dao.AbstractHibernateDao$$FastClassByCGLIB$$f9310fd3.invoke(<generated>)
   at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
   at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:695)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
   at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77)
   at cz.bellman.ena.business.EscalationBusinessImpl.scheduleUpdate(EscalationBusinessImpl.java:108)
   at sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:576)
   at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:562)
   at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:60)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
   at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
   at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
   at x.y.dao.ProductDaoHibernate$$EnhancerByCGLIB$$e01804fc.merge(<generated>)
   at cz.bellman.common.business.AbstractBusiness.merge(AbstractBusiness.java:71)
   at x.y.business.ProductBusinessImpl.updateProduct(ProductBusinessImpl.java:53)
   at x.y.business.ProductBusinessImpl.installProducts(ProductBusinessImpl.java:42)
   at x.y.business.ProductBusinessImpl.update(ProductBusinessImpl.java:22)
   at x.y.business.ProductBusinessImpl$$FastClassByCGLIB$$d3299211.invoke(<generated>)
   at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
   at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:695)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
   at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
   at x.y.business.ProductBusinessImpl$$EnhancerByCGLIB$$f3451662.update(<generated>)
   at java.util.Observable.notifyObservers(Observable.java:142)
   at java.util.Observable.notifyObservers(Observable.java:98)
   at cz.bellman.common.module.DescriptorManager.init(DescriptorManager.java:162)
   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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1240)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1205)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1171)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1099)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:861)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
   at org.jboss.seam.ioc.spring.ContextLoader.startupContextLoader(ContextLoader.java:64)
   at org.jboss.seam.ioc.spring.ContextLoader.create(ContextLoader.java:43)
   at cz.bellman.common.seam.ContextLoader.create(ContextLoader.java:29)
   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.jboss.seam.util.Reflections.invoke(Reflections.java:21)
   at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:125)
   at org.jboss.seam.Component.callComponentMethod(Component.java:2092)
   at org.jboss.seam.Component.callCreateMethod(Component.java:2015)
   at org.jboss.seam.Component.newInstance(Component.java:1976)
   at org.jboss.seam.contexts.Contexts.startup(Contexts.java:304)
   at org.jboss.seam.contexts.Contexts.startup(Contexts.java:278)
   at org.jboss.seam.contexts.ServletLifecycle.endInitialization(ServletLifecycle.java:95)
   at org.jboss.seam.init.Initialization.init(Initialization.java:596)
   at org.jboss.seam.servlet.SeamListener.contextInitialized(SeamListener.java:34)
   at cz.bellman.common.seam.SeamListenerExtended.contextInitialized(SeamListenerExtended.java:22)
   at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
   at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627)
   at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
   at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
   at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
   at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
   at org.apache.catalina.core.StandardService.start(StandardService.java:516)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
   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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)


Name and version of the database you are using: MySQL 5.0.51b


Top
 Profile  
 
 Post subject:
PostPosted: Thu Oct 16, 2008 12:44 pm 
Newbie

Joined: Sat Nov 17, 2007 8:42 pm
Posts: 2
Problem solved. I changed the code to:

Code:
Product prod = getByName(newProd.getName());
if(prod == null)
    prod = new Product(newProd.getName());
prod.getLicensedEntities().addAll(newProd.getLicensedEntities());
for(Iterator<LicensedEntity> it = prod.getLicensedEntities().iterator(); it.hasNext(); ) {
    LicensedEntity le = it.next();
    if(newProd.getLicensedEntities().contains(le))
        le.setProduct(prod);
    else
        it.remove();
}
merge(prod);


LicensedEntity objects from newProd referenced newProd (unsaved), not prod.


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.