Java 尝试更新后,Spring MVC错误的实体id

Java 尝试更新后,Spring MVC错误的实体id,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我试图编写简单的SpringMVCCrudWebApp,但在更新行时遇到了问题。我有一个包含一些用户的表,我可以通过单击表中的“编辑”按钮编辑其中的任何用户(请看图片)。然后我可以更改表单中的字段,但是当我单击表单下的“编辑”时,传递给addUser()方法的用户实体id是0,但是,当我从db获得实体时,它不是。“createdDate”字段也变为null。我找不出原因,所以我需要一些帮助。。。这是我的代码和我的应用程序的图片: user.jsp <%@ taglib uri="http

我试图编写简单的SpringMVCCrudWebApp,但在更新行时遇到了问题。我有一个包含一些用户的表,我可以通过单击表中的“编辑”按钮编辑其中的任何用户(请看图片)。然后我可以更改表单中的字段,但是当我单击表单下的“编辑”时,传递给addUser()方法的用户实体id是0,但是,当我从db获得实体时,它不是。“createdDate”字段也变为null。我找不出原因,所以我需要一些帮助。。。这是我的代码和我的应用程序的图片:

user.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@page isELIgnored="false" %>
<%@ page session="false" %>

<html>
<head>
    <title>Users</title>
    <style type="text/css">
        .tg  {border-collapse:collapse;border-spacing:0;border-color:#ccc;}
        .tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#fff;}
        .tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;}
        .tg .tg-4eph{background-color:#f9f9f9}
    </style>
</head>
<body>
<h1>
    Add a user
</h1>

<c:url var="addAction" value="/user/add" />

<form:form action="${addAction}" commandName="user">
    <table>
        <c:if test="${!empty user.name}">
            <tr>
                <td>
                    <form:label path="id">
                        <spring:message text="ID"/>
                    </form:label>
                </td>
                <td>
                    <form:input path="id" readonly="true" size="8"  disabled="true" />
                </td>
            </tr>
        </c:if>
        <tr>
            <td>
                <form:label path="name">
                    <spring:message text="Name"/>
                </form:label>
            </td>
            <td>
                <form:input path="name" />
            </td>
        </tr>
        <tr>
            <td>
                <form:label path="age">
                    <spring:message text="Age"/>
                </form:label>
            </td>
            <td>
                <form:input path="age" />
            </td>
        </tr>
        <tr>
            <td>
                <form:label path="isAdmin">
                    <spring:message text="Is admin"/>
                </form:label>
            </td>
            <td>
                <form:input path="isAdmin"/>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <c:if test="${!empty user.name}">
                    <input type="submit"
                           value="<spring:message text="Edit"/>" />
                </c:if>
                <c:if test="${empty user.name}">
                    <input type="submit"
                           value="<spring:message text="Add"/>" />
                </c:if>
            </td>
        </tr>
    </table>
</form:form>
<br>
<h3>Users list</h3>
    <table class="tg">
        <tr>
            <th width="80">ID</th>
            <th width="120">Name</th>
            <th width="120">Age</th>
            <th width="60">IsAdmin</th>
            <th width="120">Created date</th>
            <th width="60">Edit</th>
            <th width="60">Delete</th>
        </tr>
        <c:forEach items="${users}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
                <td>${user.isAdmin}</td>
                <td>${user.createdDate}</td>
                <td><a href="<c:url value='/edit/${user.id}' />" >Edit</a></td>
                <td><a href="<c:url value='/remove/${user.id}' />" >Delete</a></td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>
UserDAOImpl

package com.mihusle.dao;

import com.mihusle.model.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

import java.sql.Timestamp;
import java.util.Calendar;
import java.util.List;

/**
 * Created by MHSL on 16.06.2017.
 */
@Repository
public class UserDAOImpl implements UserDAO {

    private static final Logger LOGGER = LoggerFactory.getLogger(UserDAOImpl.class);

    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public void addUser(User user) {
        Session session = sessionFactory.getCurrentSession();
        Calendar calendar = Calendar.getInstance();
        Timestamp currentTime = new Timestamp(calendar.getTimeInMillis());
        user.setCreatedDate(currentTime);
        session.persist(user);
        LOGGER.info(user + " was added successfully");
    }

    @Override
    public void updateUser(User user) {
        Session session = sessionFactory.getCurrentSession();
        session.update(user);
        LOGGER.info(user + " was updated successfully");
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUsers() {
        Session session = sessionFactory.getCurrentSession();
        List<User> users = session.createQuery("FROM User").list();
        users.forEach(user -> LOGGER.info(user + " is in the list"));
        return users;
    }

    @Override
    public User getUserById(int id) {
        Session session = sessionFactory.getCurrentSession();
        User user = session.load(User.class, id);
        LOGGER.info(user + " was loaded successfully");
        return user;
    }

    @Override
    public void removeUser(int id) {
        Session session = sessionFactory.getCurrentSession();
        User user = session.load(User.class, id);
        if (user != null)
            session.delete(user);
        LOGGER.info(user + " was deleted successfully");
    }
}

我不知道问题出在哪里,所以如果您需要更多的代码,我准备编写它。谢谢,我解决了这个问题。我必须将
添加到id输入字段中。我想我需要对createdDate字段执行同样的操作

package com.mihusle.dao;

import com.mihusle.model.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

import java.sql.Timestamp;
import java.util.Calendar;
import java.util.List;

/**
 * Created by MHSL on 16.06.2017.
 */
@Repository
public class UserDAOImpl implements UserDAO {

    private static final Logger LOGGER = LoggerFactory.getLogger(UserDAOImpl.class);

    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public void addUser(User user) {
        Session session = sessionFactory.getCurrentSession();
        Calendar calendar = Calendar.getInstance();
        Timestamp currentTime = new Timestamp(calendar.getTimeInMillis());
        user.setCreatedDate(currentTime);
        session.persist(user);
        LOGGER.info(user + " was added successfully");
    }

    @Override
    public void updateUser(User user) {
        Session session = sessionFactory.getCurrentSession();
        session.update(user);
        LOGGER.info(user + " was updated successfully");
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUsers() {
        Session session = sessionFactory.getCurrentSession();
        List<User> users = session.createQuery("FROM User").list();
        users.forEach(user -> LOGGER.info(user + " is in the list"));
        return users;
    }

    @Override
    public User getUserById(int id) {
        Session session = sessionFactory.getCurrentSession();
        User user = session.load(User.class, id);
        LOGGER.info(user + " was loaded successfully");
        return user;
    }

    @Override
    public void removeUser(int id) {
        Session session = sessionFactory.getCurrentSession();
        User user = session.load(User.class, id);
        if (user != null)
            session.delete(user);
        LOGGER.info(user + " was deleted successfully");
    }
}
package com.mihusle.model;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.Objects;

/**
 * Created by MHSL on 16.06.2017.
 */
@Entity
@Table(name = "user", schema = "test")
public class User {

    private int id;
    private String name;
    private Integer age;
    private Boolean isAdmin;
    private Timestamp createdDate;

    @Id
    @Column(name = "id", nullable = false)
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Basic
    @Column(name = "name", nullable = true, length = 25)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Basic
    @Column(name = "age", nullable = true)
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Basic
    @Column(name = "isAdmin", nullable = true, columnDefinition = "BIT", length = 1)
    public Boolean getIsAdmin() {
        return isAdmin;
    }

    @Column(name = "isAdmin", columnDefinition = "BIT", length = 1)
    public void setIsAdmin(Boolean admin) {
        isAdmin = admin;
    }

    @Basic
    @Column(name = "createdDate", nullable = true)
    public Timestamp getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Timestamp createdDate) {
        this.createdDate = createdDate;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User that = (User) o;
        return id == that.id &&
                Objects.equals(name, that.name) &&
                Objects.equals(age, that.age) &&
                Objects.equals(createdDate, that.createdDate);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age, createdDate);
    }

    @Override
    public String toString() {
        return "User{" +
                "id = " + id +
                ", name = '" + name + '\'' +
                ", age = " + age +
                ", isAdmin = " + isAdmin +
                ", createdDate = " + createdDate +
                '}';
    }
}