超級(jí)笨笨

          好腦子,不如一個(gè)爛博客
          數(shù)據(jù)加載中……
          雙向一對(duì)多關(guān)系的問(wèn)題

          設(shè)置雙向一對(duì)多關(guān)系如下:
          一方:<many-to-one name="outWarehouse" column="outWarehouse_id" class="Warehouse" lazy="false"/>
          多方:<set name="document" inverse="true">
          <key column="warehouse_id"/>
          <one-to-many class="Document"/>
          </set>
          在書(shū)上看到"外鍵的值不允許參照相應(yīng)主表中不存在的主鍵值,或者外鍵為空值. " 這句話可以理解力為:外鍵可以為空值,但如果有值的話一定是你參照的那個(gè)主表中的主鍵值.
          但是當(dāng)我插入一個(gè)空值的時(shí)候?yàn)槭裁磿?huì)出現(xiàn)下面這些問(wèn)題呢?
          當(dāng)一方主鍵為空時(shí)就出現(xiàn)好下問(wèn)題,為什么?在baidu了好久都沒(méi)有找到是什么問(wèn)題,那么高手解決一下。
          org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.crm.model.Warehouse; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.crm.model.Warehouse
          org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:636)
          org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
          org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
          org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
          org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:744)
          com.crm.base.impl.DefaultHibernateDaoImpl.saveOrUpdate(DefaultHibernateDaoImpl.java:312)
          com.crm.base.impl.DefaultRepositoryImpl.saveOrUpdate(DefaultRepositoryImpl.java:107)
          com.crm.service.impl.DocumentServiceImpl.saveOrUpdateDoc(DocumentServiceImpl.java:24)
          com.crm.action.DocumentAction.saveOrUpdateDoc(DocumentAction.java:66)
          sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
          sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
          java.lang.reflect.Method.invoke(Unknown Source)
          com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
          com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
          com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
          org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
          org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
          org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
          org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

          root cause

          org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.crm.model.Warehouse org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242) org.hibernate.type.EntityType.getIdentifier(EntityType.java:430) org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:265) org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:619) org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:3151) org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:501) org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:227) org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:150) org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390) org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:420) org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:744) com.crm.base.impl.DefaultHibernateDaoImpl.saveOrUpdate(DefaultHibernateDaoImpl.java:312) com.crm.base.impl.DefaultRepositoryImpl.saveOrUpdate(DefaultRepositoryImpl.java:107) com.crm.service.impl.DocumentServiceImpl.saveOrUpdateDoc(DocumentServiceImpl.java:24) com.crm.action.DocumentAction.saveOrUpdateDoc(DocumentAction.java:66) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

          posted on 2009-12-29 10:22 超級(jí)笨笨 閱讀(1685) 評(píng)論(6)  編輯  收藏

          評(píng)論

          # re: 雙向一對(duì)多關(guān)系的問(wèn)題 2009-12-29 17:40 wuzhongxing

          一方:<many-to-one name="outWarehouse" column="outWarehouse_id" class="Warehouse" lazy="false"/>

          加上inverse="false" 試試

          # re: 雙向一對(duì)多關(guān)系的問(wèn)題 2009-12-29 18:02 超級(jí)笨笨

          inverse,默認(rèn)不是false嗎?

          # re: 雙向一對(duì)多關(guān)系的問(wèn)題 2009-12-30 08:59 Lancelot

          你所謂的雙向many-to-one實(shí)際應(yīng)該是one-to-one,所以根本就不該有一端為空的現(xiàn)象出現(xiàn)。

          # re: 雙向一對(duì)多關(guān)系的問(wèn)題 2009-12-30 09:56 超級(jí)笨笨

          這個(gè)問(wèn)題是我在設(shè)計(jì)表的時(shí)候設(shè)計(jì)的有點(diǎn)亂,所以才會(huì)出現(xiàn)這種情況,現(xiàn)在正在改過(guò)當(dāng)中。。。

          # re: 雙向一對(duì)多關(guān)系的問(wèn)題 2009-12-30 19:53 99讀書(shū)人俱樂(lè)部

          的考慮非官方的控股

          # re: 雙向一對(duì)多關(guān)系的問(wèn)題[未登錄](méi) 2012-05-31 13:08 a

          一方和多方配置反了吧?

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 普陀区| 襄樊市| 正镶白旗| 淮北市| 大埔区| 舞阳县| 普宁市| 五家渠市| 元氏县| 吴忠市| 囊谦县| 白玉县| 南澳县| 石首市| 霞浦县| 肥乡县| 阜阳市| 库伦旗| 新闻| 永川市| 金坛市| 肥乡县| 双柏县| 淮安市| 洱源县| 盘锦市| 红原县| 抚宁县| 明水县| 高要市| 竹北市| 新乡县| 湾仔区| 怀集县| 简阳市| 秦安县| 墨江| 行唐县| 衡水市| 徐水县| 丰台区|