Java 请求处理失败;嵌套异常为org.hibernate.id.IdentifierGenerationException:必须手动分配此类的id

Java 请求处理失败;嵌套异常为org.hibernate.id.IdentifierGenerationException:必须手动分配此类的id,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,UserBean.java package com.school.bean; public class UserBean { private Integer uid; private String uname; private String password; private String email; public Integer getUid() { return uid; } public void setUid(Integer uid) {

UserBean.java

   package com.school.bean;

   public class UserBean
   {
private Integer uid;
private String uname;   
private String password;
private String email;


public Integer getUid() {
    return uid;
}
public void setUid(Integer uid) {
    this.uid = uid;
}
public String getUname() {
    return uname;
}
public void setUname(String uname) {
    this.uname = uname;
}

public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
    }
UserController.java 我不确定是否使用@modeldattribute 我用它来接受用户的输入

    package com.school.controller;

     import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Controller;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;

    import com.school.bean.UserBean;
    import com.school.model.User;
    import com.school.service.UserService;

    import com.school.model.UserRole;
    import com.school.service.UserRoleService;
    import com.school.bean.UserRoleBean;



    @Controller
     public class UserController {

@Autowired
private UserService userService;
     private UserRoleService userRService;
int urole=0;

@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView saveUser(@ModelAttribute("user") UserBean      userBean,BindingResult result)
{
    User user = prepareModel(userBean);
    userService.addUser(user);
  saveUserRole(user);
    return new ModelAndView("index");
}

@RequestMapping(value = "/index", method = RequestMethod.GET)
public ModelAndView welcome() {
    System.out.println("signup!!!\n/n");
    return new ModelAndView("index");
}

@RequestMapping(value = "/add")
public ModelAndView signup()
{
    urole=2;    //for normal user
    System.out.println("signup!!!\n/n");
    return new ModelAndView("addUser");
}

@RequestMapping(value = "/member")
public ModelAndView becomeMember()
{
    urole=1;        //for school admin
    return new ModelAndView("addUser");
}
private User prepareModel(UserBean userBean){
    User user = new User();
    user.setUserId(userBean.getUid());
    user.setUserPassword(userBean.getPassword());
    user.setUserEmail(userBean.getEmail());
    userBean.setUid(null);
    return user;
}   
    }
java我正在避免使用UserDao接口 包com.school.dao

      import org.hibernate.SessionFactory;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Repository;

      import com.school.model.User;

      @Repository("userDao")
      public class UserDaoImpl implements UserDao {

@Autowired
private SessionFactory sessionFactory;

public void addUser(User user) {
    sessionFactory.getCurrentSession().save(user);
}

public User getUser(String uName){
    return (User) sessionFactory.getCurrentSession().get(User.class,uName);
}
    }
User.java 包com.school.model

     import java.io.Serializable;

     import javax.persistence.Column;
     import javax.persistence.Entity;
     import javax.persistence.GeneratedValue;
     import javax.persistence.GenerationType;
      import javax.persistence.Id;
     import javax.persistence.Table;



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

private static final long serialVersionUID = -723583058586873479L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "userid")
private Integer userId;

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


@Column(name="userpassword")
private String userPassword;

@Column(name="useremail")
private String userEmail;

public Integer getUserId() {
    return userId;
}

public void setUserId(Integer userId) {
    this.userId = userId;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getUserPassword() {
    return userPassword;
}

public void setUserPassword(String userPassword) {
    this.userPassword = userPassword;
}


public String getUserEmail() {
    return userEmail;
}

public void setUserEmail(String userEmail) {
    this.userEmail = userEmail;
}
  }
UserServiceImpl.java再次避免接口UserService 包com.school.service

     import org.springframework.beans.factory.annotation.Autowired;

     import org.springframework.stereotype.Service;
     import org.springframework.transaction.annotation.Propagation;
     import org.springframework.transaction.annotation.Transactional;

     import com.school.dao.UserDao;
     import com.school.model.User;

     @Service("userService")
     @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
     public class UserServiceImpl implements UserService {

@Autowired
private UserDao userDao;

@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void addUser(User user) {
    userDao.addUser(user);
}
 public User checkUser(String uName)
 {
     return (userDao.getUser(uName));
 }

    }
addUser.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">
   <html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>School Review System SignUp</title>
</head>
<body>
    <form:form method="POST" action="/AuthorizationAndAuthentication/save.html">

    <table>
            <tr>
                <td><label >USERID</label></td>
                <td><input value="${user.uid}" readonly="true" ></td>
            </tr>

            <tr>
                <td><label>USERNAME</label></td>
                <td><input  value="${user.uname}"></td>
            </tr>

            <tr>
                <td><label>PASSWORD</label></td>
                <td><input value="${user.password}"></td>
            </tr>

            <tr>
                <td><label>EMAIL</label></td>
                <td><input value="${user.email}"></td>
            </tr>

            <tr>
              <td colspan="2"><input type="submit" value="Submit"/></td>
          </tr>
        </table> 
    </form:form>

</body>
sdnext-servlet.xml

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<context:property-placeholder location="classpath:resources/database.properties"/>
<context:component-scan base-package="com.school.controller com.school.dao com.school.service"/>

<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>

<bean id="jspViewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/DAVDB" />
    <property name="username" value="root" />
    <property name="password" value="root" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="annotatedClasses">
        <list>
            <value>com.school.model.User</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

<bean id="hibernateTransactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />


</bean>

您的持久性提供程序无法确定应该使用哪种策略生成ID。它也取决于所使用的数据库,因为有些数据库不支持序列或标识

尝试指定具体的id生成策略持久性提供程序

strategy=GenerationType.IDENTITY

//not for mysql
strategy=GenerationType.SEQUENCE
或者在配置中设置适当的hibernate.dial

    <bean id="SessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
     <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            </props>
        </property>
    </bean>

我使用mysql作为我的数据库。我对hibernate不熟悉,什么是持久性提供程序,我如何设置hibernate。方言?它在标识和顺序方面给出了相同的错误。我的输入方式是否有问题?这取决于您的项目如何配置。但是你的刀里有sessionFactory,所以我这样问你桌子的设计是什么?这张桌子是你亲手做的吗?还是hibernate生成的?您在不使用autoincrement的情况下创建它,hibernate仍然可以使用它,但是您会遇到这种问题。这就是我创建表create table user id INT NOT NULL AUTO_INCREMENT、userpassword VARCHAR20 NOT NULL、username VARCHAR20 NOT NULL、useremail VARCHAR20 NOT NULL、主键userid的方式;如何解决这个问题