Hibernate级联保存,父表为空,先存子表,保存提示外键为null的错误怎么解决?
本帖最后由 dragon08 于 2013-01-17 12:55:04 编辑 两张表:父表people,子表picture
people的映射文件如下,省略字段的描述
<hibernate-mapping package="com.myproject.entity">
<class name="People" table="PEOPLE">
<meta attribute="sync-DAO">false</meta>
<cache usage="read-write"/>
<id name="id" type="java.lang.Long" column="PEOPLE_ID">
<generator class="sequence">
<param name="sequence">S_PEOPLE</param>
</generator>
</id>
<set name="pictures" inverse="true">
<key column="PEOPLE_ID"></key>
<one-to-many class="Picture"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping package="com.myproject.entity">
<class name="Picture" table="PICTURE">
<meta attribute="sync-DAO">false</meta>
<cache usage="read-write"/>
<id name="id" type="java.lang.Long" column="PICTURE_ID">
<generator class="sequence">
<param name="sequence">S_PICTURE</param>
</generator>
</id>
<many-to-one name="people" column="PEOPLE_ID" class="People" not-null="false"></many-to-one>
</class>
</hibernate-mapping>
bean.setTitle(title);
bean.setAddTime(now());
save(bean);
2013-01-17 12:16 INFO c.j.d.a.f.PictureAction - savePicture()
2013-01-17 12:16 WARN c.o.x.i.ExceptionMappingInterceptor - null
java.lang.NullPointerException
at com.myproject.common.hibernate3.BaseManagerImpl.save(BaseManagerImpl.java:125) [BaseManagerImpl.class:na]
at com.myproject.manager.impl.PictureMngImpl.savePicture(PictureMngImpl.java:40) [PictureMngImpl.class:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [na:1.5.0_11]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [na:1.5.0_11]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [na:1.5.0_11]
at java.lang.reflect.Method.invoke(Unknown Source) [na:1.5.0_11]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) [spring-aop-2.5.6.jar:2.5.6]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) [spring-aop-2.5.6.jar:2.5.6]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) [spring-aop-2.5.6.jar:2.5.6]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) [spring-tx-2.5.6.jar:2.5.6]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) [spring-aop-2.5.6.jar:2.5.6]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) [spring-aop-2.5.6.jar:2.5.6]
at $Proxy31.savePicture(Unknown Source) [na:na]
at com.myproject.action.PictureAction.savePicture(PictureAction.java:53) [PictureAction.class:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [na:1.5.0_11]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [na:1.5.0_11]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [na:1.5.0_11]
at java.lang.reflect.Method.invoke(Unknown Source) [na:1.5.0_11]
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) [xwork-2.1.2.jar:na]
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) [struts-core-2.1.6.jar:na]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at com.myproject.common.struts2.interceptor.UrlInterceptor.doIntercept(UrlInterceptor.java:91) [UrlInterceptor.class:na]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at com.myproject.core.web.CookieIdentityInterceptor.doIntercept(CookieIdentityInterceptor.java:67) [CookieIdentityInterceptor.class:na]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at com.myproject.common.struts2.interceptor.DomainNameInterceptor.doIntercept(DomainNameInterceptor.java:24) [DomainNameInterceptor.class:na]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) [xwork-2.1.2.jar:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at com.myproject.common.struts2.interceptor.ProcessingStartInterceptor.intercept(ProcessingStartInterceptor.java:32) [ProcessingStartInterceptor.class:na]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) [xwork-2.1.2.jar:na]
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) [struts-core-2.1.6.jar:na]
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:532) [struts-core-2.1.6.jar:na]
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) [struts-core-2.1.6.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) [catalina.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:na]
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) [spring-orm-2.5.6.jar:2.5.6]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-2.5.6.jar:2.5.6]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) [catalina.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:na]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) [catalina.jar:na]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [catalina.jar:na]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) [catalina.jar:na]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [catalina.jar:na]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [catalina.jar:na]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) [catalina.jar:na]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) [tomcat-coyote.jar:na]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) [tomcat-coyote.jar:na]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) [tomcat-coyote.jar:na]
at java.lang.Thread.run(Unknown Source) [na:1.5.0_11]