Hi,
I'm trying to get around the fact we need to do billions of supplier lookups to set the FK relationship on a @ManyToOne.  Our owning classes have:    
Code:
@ManyToOne
    @JoinColumn(name = "Supplier_Id", insertable = false, updatable = false)
    public Supplier getSupplier() {
        return supplier;
    }
    /**
     * Set the supplier, setting the persisted Id as well.
     * @param supplier the Supplier
     */
    public void setSupplier(final Supplier supplier) {
        this.supplier = supplier;
        this.setSupplierId(null == supplier ? null : supplier.getId());
    }
    @Column(name = "Supplier_Id", nullable = false)
    public Long getSupplierId() {
        return supplierId;
    }
    public void setSupplierId(final Long supplierId) {
        this.supplierId = supplierId;
    }
I had assumed that with insertable = false and updateable=false, we could simply set the id without having to populate the relationship when creating new instances of the owning classes, and use the full supplier obnject when reading back from the db.
In some places when creating new owning instances, I do set a transient into the supplier attribute as a placeholder, thinking that the "insertable = false, updateable= false" on the @JoinColumn would ensure hibernate didn't care about the transients in that field.  However this is not the case.  It looks like the cascades are still doing validation:
Quote:
2014-08-11 14:17:39,061 DEBUG [com.synyati.spurwing.download.pnr.air.AIRParser] (WorkManager(2)-50) translate(): caught Exception
java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.synyati.spurwing.reservation.entity.CustomerLoyalty.supplier -> com.synyati.spurwing.reservation.entity.Supplier
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:611)
	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:307)
	at org.jboss.jpa.tx.TransactionScopedEntityManager.flush(TransactionScopedEntityManager.java:216)
	at com.synyati.spurwing.download.pnr.PNRDatabaseOverwriteOutput.saveNewReservation(PNRDatabaseOverwriteOutput.java:1406)
	at com.synyati.spurwing.download.pnr.PNRDatabaseOverwriteOutput.complete(PNRDatabaseOverwriteOutput.java:136)
	at com.synyati.spurwing.download.pnr.PNRFactoryOutput.complete(PNRFactoryOutput.java:573)
	at com.synyati.spurwing.download.pnr.air.AIRTranslator.translate(AIRTranslator.java:107)
	at com.synyati.spurwing.download.pnr.air.AIRParser.translate(AIRParser.java:1429)
	at com.synyati.spurwing.download.pnr.air.AIRParser.parse(AIRParser.java:364)
	at com.synyati.spurwing.download.DownloadManager.onMessage(DownloadManager.java:103)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
	at org.jboss.ejb3.interceptors.container.ContainerMethodInvocationWrapper.invokeNext(ContainerMethodInvocationWrapper.java:72)
	at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor$InvocationContext.proceed(InvocationContextInterceptor.java:138)
	at com.synyati.spurwing.base.interceptor.SpurwingSecurityInterceptor.securityCheck(SpurwingSecurityInterceptor.java:99)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:83)
	at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:70)
	at org.jboss.ejb3.interceptors.container.ContainerMethodInvocationWrapper.invokeNext(ContainerMethodInvocationWrapper.java:62)
	at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor$InvocationContext.proceed(InvocationContextInterceptor.java:138)
	at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:44)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
	at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:118)
	at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:83)
	at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:70)
	at org.jboss.ejb3.interceptors.container.ContainerMethodInvocationWrapper.invokeNext(ContainerMethodInvocationWrapper.java:62)
	at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor$InvocationContext.proceed(InvocationContextInterceptor.java:138)
	at com.synyati.spurwing.base.interceptor.SpurwingExceptionHandler.handleException(SpurwingExceptionHandler.java:81)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:83)
	at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:70)
	at org.jboss.ejb3.interceptors.container.ContainerMethodInvocationWrapper.invokeNext(ContainerMethodInvocationWrapper.java:62)
	at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:76)
	at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:62)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
	at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_1133250658.invoke(InvocationContextInterceptor_z_fillMethod_1133250658.java)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
	at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1133250658.invoke(InvocationContextInterceptor_z_setup_1133250658.java)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
	at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:194)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.security.RunAsSecurityInterceptorv2.invoke(RunAsSecurityInterceptorv2.java:94)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:79)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.core.context.CurrentInvocationContextInterceptor.invoke(CurrentInvocationContextInterceptor.java:47)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.interceptor.EJB3TCCLInterceptor.invoke(EJB3TCCLInterceptor.java:86)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:281)
	at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:311)
	at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:153)
	at $Proxy314.onMessage(Unknown Source)
	at org.jboss.resource.adapter.jms.inflow.JmsServerSession.onMessage(JmsServerSession.java:179)
	at org.jboss.jms.client.container.ClientConsumer.callOnMessageStatic(ClientConsumer.java:167)
	at org.jboss.jms.client.container.SessionAspect.handleRun(SessionAspect.java:879)
	at org.jboss.aop.advice.org.jboss.jms.client.container.SessionAspect_z_handleRun_1133250658.invoke(SessionAspect_z_handleRun_1133250658.java)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:172)
	at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.jms.client.delegate.ClientSessionDelegate.run(ClientSessionDelegate.java)
	at org.jboss.jms.client.JBossSession.run(JBossSession.java:199)
	at org.jboss.resource.adapter.jms.inflow.JmsServerSession.run(JmsServerSession.java:236)
	at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:205)
	at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:260)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.synyati.spurwing.reservation.entity.CustomerLoyalty.supplier -> com.synyati.spurwing.reservation.entity.Supplier
	at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:376)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:164)
	at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:453)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:133)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:107)
	at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:674)
	at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:666)
	at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:346)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:302)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:246)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:195)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:332)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:273)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:249)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:195)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
	at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:478)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:134)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:107)
	at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:674)
	at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:666)
	at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:346)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:302)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:246)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:195)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
	at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:453)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:133)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:107)
	at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:674)
	at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:666)
	at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:346)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:302)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:246)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:195)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:332)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:273)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:249)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:195)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
	at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
	at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1030)
	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:304)
	... 108 more
So I guess I have two questions:
1 - is there a way to insert large numbers of owning side instances in a @ManyToOne withoout having to do lookups each time to get attached instances of the FK object?
2 - is there a way to prevent the cascades checking when the join column is insertable & updateable false?
Thanks heaps for your help.