简体   繁体   English

Hibernate连接两个表

[英]Hibernate joining two tables

I am trying to learn Spring and Hibernate . 我正在尝试学习Spring和Hibernate。 I have the following form 我有以下表格

在此处输入图片说明

After inserting the form values in my database tables, I want them to look like following: 在我的数据库表中插入表单值之后,我希望它们看起来如下:

Table Name : student 表名:学生

student_id    studentName
  1.           Jason Stathum

Table Name : studentdetails 表名:studentdetails

studentDetailsid   FatherName   MotherName    student_id
   1                 Mr.X          Mrs. Y        1

But when I actually insert values in my database, the studentdetails table looks like following 但是当我实际上在数据库中插入值时, studentdetails表看起来像下面的样子

Table Name : studentdetails 表名:studentdetails

studentDetailsid   FatherName   MotherName    student_id
   1                 Mr.X          Mrs. Y        NULL

As you can see everything works perfectly but only the student_id column doesn't get filled up. 如您所见,一切工作正常,但只有student_id列没有被填满。 Could you please tell me what I am doing wrong? 你能告诉我我在做什么错吗?

Here's are my codes: 这是我的代码:

Model Class : Student 模特班:学生

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

Model Class : 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

Controller 控制者

 @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 Page : Form 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 学生DaoImpl

@Override
public void addStudent(Student student) {

    Session session = getSessionFactory().openSession();
    Transaction tx;
    tx = session.beginTransaction();
    session.save(student);  

    tx.commit();
}

Removing the @JoinColumn annotation from the student attribute in StudentDetails should fix the issue: 卸下@JoinColumn从注释student在属性StudentDetails应该解决这个问题:

@ManyToOne
//@JoinColumn(name="student_id")
private Student student;

Change this fragment: 更改此片段:

@ManyToOne
@JoinColumn(name="student_id")
private Student student;

to: 至:

@ManyToOne
private Student student;

and this should work. 这应该工作。

I have managed to solve the problem, I hope this will help others someday. 我设法解决了这个问题,希望有一天能对其他人有所帮助。 I made some changes in my 我做了一些改变

Model Class: 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

And then removed the private Student student; 然后删除private Student student; property from Model Class: StudentDetails. 模型类中的属性:StudentDetails。 So now it looks like this: 所以现在看起来像这样:

Model Class : 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM