Java 请求处理失败;嵌套异常为org.hibernate.id.IdentifierGenerationException:必须手动分配此类的id
UserBean.javaJava 请求处理失败;嵌套异常为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) {
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的方式;如何解决这个问题