2014-09-10 3 views
0

Я пытаюсь узнать весну и спящий режим. У меня есть следующий видСпящий режим, соединяющий два стола

enter image description here

После установки значения формы в моих таблицах базы данных, я хочу, чтобы выглядеть следующим образом:

Имя таблицы: студент

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(); 
} 

ответ

0

Удаление @JoinColumn аннотацию из атрибута student в StudentDetails должен решить проблему:

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

Спасибо за Ваш ответ. Я просто удалил '@JoinColumn (name =" student_id ")' и запустил мое приложение, но все еще не работал. Он изменил мое имя столбца на 'student_student_id' из' student_id'. Спасибо –

+0

Это странно, 'student_id' должно быть именем столбца по умолчанию. Использование JoinColumn здесь не так, оно должно быть избыточным. Поскольку данные StudentDetails сохраняются, каскад, похоже, работает - даже незнакомец. – kostja

+0

Правильно ли хранится внешний ключ, если вы (предположительно избыточно) сохраняете или объединяете StudentDetails после сохранения студента? – kostja

0

Изменить этот фрагмент:

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

к:

@ManyToOne 
private Student student; 

и это должно работать.

+0

Какая разница с моим (ранее) ответом? – kostja

+0

Я все еще получаю NULL –

+0

@ kostja просто состояние гонки во время редактирования ответа. Кажется, что это не работает. –

0

Мне удалось решить проблему, я надеюсь, что это когда-нибудь поможет другим. Я сделал некоторые изменения в моей

Модель класса: 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. Так что теперь это выглядит следующим образом: Класс

Модель: 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 
Смежные вопросы