我正在學習Spring和Hibernate。我有以下形式休眠加入兩張表
在我的數據庫表中插入表單值後,我希望他們看起來像以下:
表名:學生
student_id studentName
1. Jason Stathum
表名:studentdetails
studentDetailsid FatherName MotherName student_id
1 Mr.X Mrs. Y 1
但是當我真正在我的數據庫插入值,該studentdetails
表看起來像下面
表名:studentdetails
studentDetailsid FatherName MotherName student_id
1 Mr.X Mrs. Y NULL
正如你所看到的一切完美的作品,但只有student_id
列沒有按不會被填滿。你能告訴我我做錯了什麼嗎?
這裏的是我的代碼:
模型類:學生
package com.spring.org.model
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="student_id", nullable= false)
private Integer studentId;
private String studentName;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "student")
private List<StudentDetails> studentDetails = new ArrayList<StudentDetails>();
// Getters and Setters
模型類:StudentDetails
@Entity
@Table(name = "studentDetails")
public class StudentDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer studentDetailsId;
private String FatherName;
private String MotherName;
@ManyToOne
@JoinColumn(name="student_id")
private Student student;
// Getters and Setters
控制器
@RequestMapping(value="addstudent", method = RequestMethod.GET)
public String addStudent(@ModelAttribute("secret") Student student, BindingResult result, Model map)
{
map.addAttribute("student", new Student());
return "addStudent";
}
@RequestMapping(value="addstudent", method = RequestMethod.POST)
public String saveStudent(@ModelAttribute("secret") Student student, BindingResult result, Model map)
{
studentService.addStudent(student);
map.addAttribute("success", "Submitted");
return "msg";
}
JSP頁:表
<c:url var="saveUrl" value="/addstudent" />
<form:form modelAttribute="secret" method="POST" action="${saveUrl}">
<table>
<tr>
<td><form:label path="studentName">Student Name:</form:label></td>
<td><form:input path="studentName"/></td>
</tr>
<tr>
<td><form:label path="studentDetails[0].FatherName">Father Name:</form:label></td>
<td><form:input path="studentDetails[0].FatherName"/></td>
</tr>
<tr>
<td><form:label path="studentDetails[0].MotherName">Mother Name:</form:label></td>
<td><form:input path="studentDetails[0].MotherName"/></td>
</tr>
</table>
<input type="submit" value="Save" />
</form:form>
StudentDaoImpl
@Override
public void addStudent(Student student) {
Session session = getSessionFactory().openSession();
Transaction tx;
tx = session.beginTransaction();
session.save(student);
tx.commit();
}
感謝您的答覆。我剛剛刪除了'@JoinColumn(name =「student_id」)'並運行了我的應用程序,但仍然無法運行。它將我的列名從'student_id'改爲'student_student_id'。謝謝 – 2014-09-10 14:51:07
這很奇怪,'student_id'應該是默認的列名。這裏使用JoinColumn並沒有錯,它應該是多餘的。由於StudentDetails確實被存儲,級聯似乎正在工作 - 甚至是陌生人。 – kostja 2014-09-10 14:53:44
如果您(保留冗餘)保存或合併學生詳細信息保存學生後外鍵是否正確存儲? – kostja 2014-09-10 14:59:32