使用hibernate和struts2插入具有一对一映射的多个表
我有5张桌子:使用hibernate和struts2插入具有一对一映射的多个表,hibernate,jsp,struts2,Hibernate,Jsp,Struts2,我有5张桌子: 学生个人信息 学生联系方式详情 学生家长详细信息 学生资格详情 研究其他细节 这里的StudentPersonnelDetails是将studentId作为主键的父表,它是所有其他表中的外键 我正在使用Hibernate4.2.1和Struts2.1 我在JSP中有一个表单,其中的控件包含所有学生的详细信息,这些信息应该插入到相应的表中 现在我的问题是,我得到的NullPointerException具有以下堆栈跟踪: java.lang.NullPointerExcepti
- 学生个人信息
- 学生联系方式详情
- 学生家长详细信息
- 学生资格详情
- 研究其他细节
StudentPersonnelDetails
是将studentId
作为主键的父表,它是所有其他表中的外键
我正在使用Hibernate4.2.1和Struts2.1
我在JSP中有一个表单,其中的控件包含所有学生的详细信息,这些信息应该插入到相应的表中
现在我的问题是,我得到的NullPointerException
具有以下堆栈跟踪:
java.lang.NullPointerException
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValue(AbstractEntityTuplizer.java:648)
at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:4527)
at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:99)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:735)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:727)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:723)
at com.dao.StudentDAO.saveOtherDetails(StudentDAO.java:133)
at com.actions.StudentRegisterAction.otherDetails(StudentRegisterAction.java:125)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Dec 18, 2013 10:28:28 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
WARNING: No configuration found for the specified action: 'StudentOtherAction' in namespace: '/jsp'. Form action defaulting to 'action' attribute's literal value.
Dec 18, 2013 10:28:28 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
WARNING: No configuration found for the specified action: 'StudentOtherAction' in namespace: '/jsp'. Form action defaulting to 'action' attribute's literal value.
Dec 18, 2013 10:28:28 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
WARNING: No configuration found for the specified action: '' in namespace: '/jsp'. Form action defaulting to 'action' attribute's literal value.
Dec 18, 2013 10:28:28 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
WARNING: No configuration found for the specified action: '' in namespace: '/jsp'. Form action defaulting to 'action' attribute's literal value.
所以我并没有走错方向。以下是相关的类和文件供您参考
1) student.hbm.xml
<class name="com.beans.student.StudentPersonnelDetails" table="SchoolStudentPersonnelDetails">
<id name="sId" column="StudentId">
<generator class="increment">
</generator>
</id>
<property name="course" column="Course"></property>
<property name="division" column="Division"></property>
<property name="birthDate" column="BirthDate" type="java.util.Date"></property>
<property name="admissionDate" column="AdmissionDate" type="java.util.Date"></property>
<property name="fName" column="FirstName"></property>
<property name="middleName" column="MiddleName"></property>
<property name="lName" column="LastName"></property>
<property name="gender" column="Gender"></property>
<property name="nationality" column="Nationality"></property>
<property name="bloodGroup" column="BloodGroup"></property>
<property name="caste" column="Caste"></property>
<property name="religion" column="Religion"></property>
<property name="feeStructureFor" column="FeeStructureFor"></property>
<property name="feeConcession" column="FeesConcession" type="java.lang.Boolean"></property>
<one-to-one name="StudentContactDetails" class="com.beans.student.StudentContactDetails" cascade="delete"></one-to-one>
</class>
<class name="com.beans.student.StudentContactDetails" table="SchoolStudentContactDetails">
<id name="sId" column="StudentId">
<generator class="foreign">
<param name="property">StudentPersonnelDetails</param></generator>
</id>
<property name="residentialAddress" column="ResidentialAddress" ></property>
<property name="permanentAddress" column="PermanentAddress"></property>
<property name="resPerSame" column="ResPerAddressSame" type="java.lang.Boolean"></property>
<property name="country" column="Country"></property>
<property name="state" column="State"></property>
<property name="city" column="City"></property>
<one-to-one name="StudentPersonnelDetails" class="com.beans.student.StudentPersonnelDetails" constrained="true"></one-to-one>
</class>
<class name="com.beans.student.StudentParentDetails" table="SchoolStudentParentDetails">
<id name="sId" column="StudentId">
<generator class="foreign">
<param name="property">StudentPersonnelDetails</param>
</generator>
</id>
<property name="fatherName" column="FatherName"></property>
<property name="motherName" column="MotherName"></property>
<property name="fatherQualification" column="FatherQualification"></property>
<property name="motherQualification" column="MotherQualification"></property>
<property name="fatherOccupation" column="FatherOccupation"></property>
<property name="motherOccupation" column="MotherOccupation"></property>
<property name="fatherEmail" column="FatherEmail"></property>
<property name="motherEmail" column="MotherEmail"></property>
<property name="fatherMobileNo" column="FatherMobile"></property>
<property name="motherMobileNo" column="MotherMobile"></property>
<one-to-one name="StudentPersonnelDetails" class="com.beans.student.StudentPersonnelDetails" constrained="true"></one-to-one>
</class>
<class name="com.beans.student.StudentQualificationDetails" table="SchoolQualificationDetails">
<id name="sId" column="StudentId">
<generator class="foreign">
<param name="property">StudentPersonnelDetails</param>
</generator>
</id>
<property name="previousSchool" column="PreviousSchool"></property>
<property name="schoolState" column="PreviousSchoolState"></property>
<property name="schoolCity" column="PreviousSchoolCity"></property>
<property name="percentage" column="PreviousClassPercentage" type="java.lang.Double"></property>
<one-to-one name="StudentPersonnelDetails" class="com.beans.student.StudentPersonnelDetails" constrained="true"></one-to-one>
</class>
<class name="com.beans.student.StudentOtherDetails" table="SchoolStudentOtherDetails">
<id name="sId" column="StudentId">
<generator class="foreign">
<param name="property"></param>
</generator>
</id>
<property name="hostelFacility" column="HostelFacility" type="java.lang.Boolean"></property>
<property name="busFacility" column="BusFacility" type="java.lang.Boolean"></property>
<property name="nearbyArea" column="NearByArea"></property>
<one-to-one name="StudentPersonnelDetails" class="com.beans.student.StudentPersonnelDetails" constrained="true"></one-to-one>
</class>
3) StudentDAO.java
package com.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.beans.student.StudentContactDetails;
import com.beans.student.StudentOtherDetails;
import com.beans.student.StudentParentDetails;
import com.beans.student.StudentPersonnelDetails;
import com.beans.student.StudentQualificationDetails;
import com.dbutil.HibernateUtil;
public class StudentDAO {
/*public boolean registerStudent(StudentPersonnelDetails sp,StudentContactDetails sc,StudentParentDetails sparent,StudentQualificationDetails sq,StudentOtherDetails so){
Session session=null;
Transaction tr=null;
System.out.println("in registerStudent.....");
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sp);
session.saveOrUpdate(sc);
session.saveOrUpdate(sparent);
session.saveOrUpdate(sq);
session.saveOrUpdate(so);
tr.commit();
return true;
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}*/
public boolean savePersonnelDetails(StudentPersonnelDetails sp){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sp);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveContactDetails(StudentContactDetails sc){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sc);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveParentDetails(StudentParentDetails sparent){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sparent);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveQualificationDetails(StudentQualificationDetails sq){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sq);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveOtherDetails(StudentOtherDetails so){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(so);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
}
所有细节都是Bean类
package com.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.beans.student.StudentContactDetails;
import com.beans.student.StudentOtherDetails;
import com.beans.student.StudentParentDetails;
import com.beans.student.StudentPersonnelDetails;
import com.beans.student.StudentQualificationDetails;
import com.dbutil.HibernateUtil;
public class StudentDAO {
/*public boolean registerStudent(StudentPersonnelDetails sp,StudentContactDetails sc,StudentParentDetails sparent,StudentQualificationDetails sq,StudentOtherDetails so){
Session session=null;
Transaction tr=null;
System.out.println("in registerStudent.....");
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sp);
session.saveOrUpdate(sc);
session.saveOrUpdate(sparent);
session.saveOrUpdate(sq);
session.saveOrUpdate(so);
tr.commit();
return true;
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}*/
public boolean savePersonnelDetails(StudentPersonnelDetails sp){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sp);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveContactDetails(StudentContactDetails sc){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sc);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveParentDetails(StudentParentDetails sparent){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sparent);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveQualificationDetails(StudentQualificationDetails sq){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(sq);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
public boolean saveOtherDetails(StudentOtherDetails so){
Session session=null;
Transaction tr=null;
try{
session=HibernateUtil.getSession();
tr=session.beginTransaction();
session.saveOrUpdate(so);
tr.commit();
}catch(Exception e){
e.printStackTrace();
tr.rollback();
}
return false;
}
}