0

I am trying to add/update students but while updating student I am getting an error. But while adding student it works fine. I am getting this error while updating: -

HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

add-students.jsp

<form:form action="addStudent" enctype="multipart/form-data" modelAttribute="addstd" method="POST" >
    <form:hidden path="id" />
     ${message}
    <form:errors path="firstName" cssClass="error" />
    <form:input path="firstName" placeholder="Fistname" />

    <form:errors path="lastName" cssClass="error" />
    <form:input path="lastName" placeholder="Lastname" />

    <form:input path="contact_No" placeholder="Contact Number" />
    <form:input path="address" placeholder="Address" />

    <form:errors path="email" cssClass="error" />
    <form:input path="email" placeholder="Email" />

    <p class="msg">
        Year:
    <form:select path="year">
            <c:forEach var="temp" items="${studentyear}">
            <form:option value="${temp.yearId}">${temp.year}</form:option>
            </c:forEach>
        </form:select> 

      Faculty: 
        <form:select path="faculty">
            <c:forEach var="temp" items="${studentfaculty}">
            <form:option value="${temp.faculty_id}" >${temp.faculty}</form:option>
            </c:forEach>
        </form:select>
      Profile: <input type="file" name="image" accept="image/*" />

    </p>
    <input type="submit" value="Add/Update Record" class="button" />
</form:form>

@Controller class

@RequestMapping(value="/addStudent",method=RequestMethod.POST)
public String saveStudent(@RequestParam("image") MultipartFile file,@RequestParam("id") int theId,@ModelAttribute("addstd") @Valid StudentInfo theStudent,BindingResult result,Model model){
    String fileName=null; 
    if(!file.isEmpty()){

        try {
            String path= session.getServletContext().getRealPath("/resources/images");
            String newName=String.valueOf(new java.util.Date().getTime());
            fileName=file.getOriginalFilename();
            String ext=FilenameUtils.getExtension(fileName);
            if(ext.equalsIgnoreCase("jpg") || ext.equalsIgnoreCase("jpeg") || ext.equalsIgnoreCase("png")){
            File imageFile=new File(path,newName+"."+ext);
            file.transferTo(imageFile);
            theStudent.setImages(newName+"."+ext);

            if(theId!=0){
               StudentInfo std=studentService.getStudent(theId);
               String images= std.getImages();
               File oldImage=new File(path,images);
            Files.delete(oldImage.toPath());
            }
            }
        } catch (Exception e) {

        }
    }
    if(result.hasErrors()){


    List <Year> theYear = studentService.getYear();
    model.addAttribute("studentyear",theYear);

    List<Faculty> theFaculty=studentService.getFaculty();
    model.addAttribute("studentfaculty",theFaculty);
        return "add-students";
    }else{
        studentService.saveStudent(theStudent);
        return "redirect:/login";

        }
}

@RequestMapping("/showFormForUpdate")
public String showUpdateStudent(@RequestParam("studentId") int theId, Model model){

     StudentInfo theStudent=studentService.getStudent(theId);
     model.addAttribute("addstd",theStudent);

    List <Year> theYear = studentService.getYear();
    model.addAttribute("studentyear",theYear);

    List<Faculty> theFaculty=studentService.getFaculty();
    model.addAttribute("studentfaculty",theFaculty);
     return "add-students";
}

StudentDAOImpl.class

 public void saveStudent(StudentInfo theStudent) {
    Session currentSession=sessionFactory.getCurrentSession();       
    currentSession.saveOrUpdate(theStudent);

}

StudentInfo.class

@Entity
@Table (name="studentinfo")
public class StudentInfo implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;


@Column(name="year_id")
private int year;


@Column(name="faculty_id")
private int faculty;

@NotEmpty(message="First Name cannot be empty")
@Column(name="firstname")
private String firstName;

@NotEmpty(message="Last Name cannot be empty")
@Column(name="lastname")
private String lastName;

@Column(name="contact_no")
private String contact_No;

@Column(name="address")
private String address;


@Email(message="Enter a valid email address")
@Column(name="email")
private String email;


@Column(name="images")
private String images;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="ID")
private User user;

 //getter and setter here

User.class

@Entity
@Table(name="user")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="user_id")
private int user_id;

@Column(name="username")
private String username;

@Column(name="password")
private String password;

@OneToOne(mappedBy = "user",fetch = FetchType.LAZY)
private StudentInfo info;

//getter and setter here
sudeepsth
  • 42
  • 2
  • 14
  • Did you see if some database constraints are being violated by the data update? – Harshil Sharma Jan 03 '17 at 04:12
  • Possible duplicate of [What is a stack trace, and how can I use it to debug my application errors?](http://stackoverflow.com/questions/3988788/what-is-a-stack-trace-and-how-can-i-use-it-to-debug-my-application-errors) – Raedwald Jan 03 '17 at 08:58

1 Answers1

0

In your StudentInfo class there is one field:

private User user;

You have not mapped user with any field in your form controller.

You can map your user like this:

<form:hidden path="user.user_id"/>

If you want to allow this value as null then provide

nullable = true

in your one-to-one annotation and also allow null in db.

If you are doing add student and you have not user nullable then you will have to somehow inject user into your controller.

For example, in your controller method while adding new StudentInfo get user info from database and then inject in studentInfo. I have written sudo code as below:

// User user = session.get(User.class, 1);
// studentInfo.setUser(user);
// saveorUpdate studentInfo
Nimesh
  • 794
  • 3
  • 8
  • 18