Я пытаюсь узнать весну и спящий режим. У меня есть следующий видСпящий режим, соединяющий два стола
После установки значения формы в моих таблицах базы данных, я хочу, чтобы выглядеть следующим образом:
Имя таблицы: студент
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_student_id' из' student_id'. Спасибо –
Это странно, 'student_id' должно быть именем столбца по умолчанию. Использование JoinColumn здесь не так, оно должно быть избыточным. Поскольку данные StudentDetails сохраняются, каскад, похоже, работает - даже незнакомец. – kostja
Правильно ли хранится внешний ключ, если вы (предположительно избыточно) сохраняете или объединяете StudentDetails после сохранения студента? – kostja