2014-09-11 4 views
0

Я использую Hibernate и Spring MVC. У меня есть следующая формаManyToOne - внешний ключ не устанавливается при сохранении

enter image description here

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

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

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> 
+0

Вы устанавливаете 'cityName' а не' id' в '' международное в 'Student' –

ответ

0

Я размышляю здесь, но могло ли быть так, что вы фактически не выбрали город при вводе записи, а вместо этого просто ввели имя студента, имя отца и имя матери и оставили город в первом городе в вашем списке, который оказался «Нью-Йорк». Возможно, вы могли бы добавить дополнительный вариант «пожалуйста, выберите», с помощью валидатора, который заставит вас выбрать город.

Кроме того, я замечаю, что вы используете city_id в некоторых местах и ​​city_ID в других. Является ли ваша база данных нечувствительной к регистру для имен столбцов?

+0

Спасибо за ваш ответ. Я пробовал с дополнительной опцией «пожалуйста, выберите», но это не сработало. Я использовал 'city_ID' для обращения к моей« городской »таблице, и я использовал« city_id »для столбца внешнего ключа в таблице« studentDetails ». И я думаю, что моя база данных не учитывает регистр для имен столбцов. благодаря –

0

Я столкнулся с проблемой: я внес некоторые изменения в свою HTML-форму и теперь ее работу.

<tr> 
    <td><label>City</label></td> 
    <td><form:select path="studentDetails[0].city.cityId"> 
     <c:forEach var="row" items="${city}"> 
      <option value="${row.cityId}">${row.cityName}</option>   
     </c:forEach> 
     </form:select> 
    </td> 
</tr> 
Смежные вопросы