[英]Hibernate joining two tables
我正在尝试学习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
模特班:学生详情
@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>
学生DaoImpl
@Override
public void addStudent(Student student) {
Session session = getSessionFactory().openSession();
Transaction tx;
tx = session.beginTransaction();
session.save(student);
tx.commit();
}
卸下@JoinColumn
从注释student
在属性StudentDetails
应该解决这个问题:
@ManyToOne
//@JoinColumn(name="student_id")
private Student student;
更改此片段:
@ManyToOne
@JoinColumn(name="student_id")
private Student student;
至:
@ManyToOne
private Student student;
这应该工作。
我设法解决了这个问题,希望有一天能对其他人有所帮助。 我做了一些改变
模特班:学生
@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)
@JoinColumn(name="student_id", referencedColumnName="student_id")
private List<StudentDetails> studentDetails = new ArrayList<StudentDetails>();
// Getters and Setters
然后删除private Student student;
模型类中的属性:StudentDetails。 所以现在看起来像这样:
模特班:学生详情
@Entity
@Table(name = "studentDetails")
public class StudentDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer studentDetailsId;
private String FatherName;
private String MotherName;
// Getters and Setters
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.