超級笨笨

          好腦子,不如一個爛博客
          數據加載中……
          雙向一對多關系的問題

          設置雙向一對多關系如下:
          一方:<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>
          在書上看到"外鍵的值不允許參照相應主表中不存在的主鍵值,或者外鍵為空值. " 這句話可以理解力為:外鍵可以為空值,但如果有值的話一定是你參照的那個主表中的主鍵值.
          但是當我插入一個空值的時候為什么會出現下面這些問題呢?
          當一方主鍵為空時就出現好下問題,為什么?在baidu了好久都沒有找到是什么問題,那么高手解決一下。
          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 超級笨笨 閱讀(1685) 評論(6)  編輯  收藏

          評論

          # re: 雙向一對多關系的問題 2009-12-29 17:40 wuzhongxing

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

          加上inverse="false" 試試
            回復  更多評論    

          # re: 雙向一對多關系的問題 2009-12-29 18:02 超級笨笨

          inverse,默認不是false嗎?
            回復  更多評論    

          # re: 雙向一對多關系的問題 2009-12-30 08:59 Lancelot

          你所謂的雙向many-to-one實際應該是one-to-one,所以根本就不該有一端為空的現象出現。
            回復  更多評論    

          # re: 雙向一對多關系的問題 2009-12-30 09:56 超級笨笨

          這個問題是我在設計表的時候設計的有點亂,所以才會出現這種情況,現在正在改過當中。。。
            回復  更多評論    

          # re: 雙向一對多關系的問題 2009-12-30 19:53 99讀書人俱樂部

          的考慮非官方的控股
            回復  更多評論    

          # re: 雙向一對多關系的問題[未登錄] 2012-05-31 13:08 a

          一方和多方配置反了吧?
            回復  更多評論    

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 中西区| 大名县| 鹤山市| 宜兰县| 琼结县| 于都县| 雷州市| 鹤庆县| 武隆县| 津市市| 会同县| 茌平县| 清丰县| 安阳市| 平遥县| 镇坪县| 衡阳市| 武邑县| 尼勒克县| 农安县| 会泽县| 临海市| 商南县| 溧水县| 海晏县| 乌兰察布市| 玛纳斯县| 海南省| 凉山| 永春县| 禄丰县| 澎湖县| 泰宁县| 莱西市| 湖北省| 灵川县| 华坪县| 井研县| 江安县| 芦溪县| 牙克石市|