Я использую Hibernate и Spring MVC. У меня есть следующая формаManyToOne - внешний ключ не устанавливается при сохранении
Когда я отправить форму, я хочу, чтобы мои таблицы базы данных, чтобы заполнить как следующее:
Имя таблицы: студент
student_id studentName
1. Jason Stathum
ИмяТаблицы : studentdetails
studentDetailsid FatherName MotherName city_id student_id
1 Mr.X Mrs. Y 1 1
Но когда я фактически запускаю свое приложение и вставляю данные формы, все работает отлично, за исключением того, что столбец city_id
не заполняется. Таблица выглядит следующим:
Название таблицы: studentdetails
studentDetailsid FatherName MotherName city_id student_id
1 Mr.X Mrs. Y NULL 1
FYI, у меня есть также таблицу с именем город, который выглядит следующим образом
Название таблицы: studentdetails
city_ID city_name
1 NewYork
Я включил свои коды ниже, Не могли бы вы рассказать мне h решить эту проблему?
Большое спасибо
Entity: 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
Entity: StudentDetails
@Entity
@Table(name = "studentDetails")
public class StudentDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer studentDetailsId;
private String FatherName;
private String MotherName;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="city_id")
private City city;
// Getters and Setters
Entity: Город
@Entity
@Table(name = "CITY")
public class City {
@Id
@Column(name="city_ID")
@GeneratedValue
private int cityId;
@Column(name="city_name")
private String cityName;
// 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());
List<City> myCities = subService.getCity();
map.addAttribute("city", myCities);
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";
}
StudentDaoImpl
Session session = getSessionFactory().openSession();
Transaction tx;
tx = session.beginTransaction();
session.save(student);
tx.commit();
Моя форма: addStudent.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>
<tr>
<td><label>City</label></td>
<td><form:select path="studentDetails[0].city">
<c:forEach var="row" items="${city}">
<option value="${row.cityId}">${row.city}</option>
</c:forEach>
</form:select>
</td>
</tr>
</table>
<input type="submit" value="Save" />
</form:form>
Вы устанавливаете 'cityName' а не' id' в '' международное в 'Student' –