在一开始建立数据库表时,建立好约束,建立好索引,表的设计合理,之后的一切都会是很美好的。比如有3张表:
学生:t_student
id
name
email
科目:t_subjects
id
subjects name
student_id
考试:t_test
id
student_id
subjects_id
month
times
学生表和科目表,学生表和考试表,科目和考试都是一对多关系。建立好索引和约束,然后由hibernate自动生成hbm文件,并在学生表、科目表的hbm文件里设置inverse="true" cascade="all" lazy="true"。
就大致配置好了,然后假如要录入这样一条涉及到3个表的记录:
学生姓名、email、科目名称、月份、考试次数
就只需要写一个简单的方法调用session.save就可以保存所有内容了:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm student_registerForm = (DynaActionForm) form;// TODO Auto-generated method stub
//receive from actionform
String strname = student_registerForm.getString("name");
String stremail = student_registerForm.getString("email");
String strsubjectname = student_registerForm.getString("subjectname");
int intmonth = Integer.parseInt(student_registerForm.getString("month"));
int inttimes = Integer.parseInt(student_registerForm.getString("times"));
TStudent tStudent = new TStudent();
tStudent.setName(strname);
tStudent.setEmail(stremail);
//set the subject
TSubjects Tsubjects = new TSubjects();
Tsubjects.setTStudent(tStudent);
Tsubjects.setName(strname);
tStudent.getTSubjectses().add(Tsubjects);
//set the test
TTest Ttest = new TTest();
Ttest.setTStudent(tStudent);
Ttest.setMonth(intmonth);
Ttest.setTimes(inttimes);
tStudent.getTTests().add(Ttest);
//insert all
tstudentDAO.insert(tStudent);
return mapping.findForward("ok");
}
tstudentDAO只有一个操作:
session.save(tStudent);
之后可以看到3个表里的记录都同时增加好了。