关于hibernate做添加主键自增长数据保存失败的问题

本人做User表的增删改查
在添加方法的时候,由于User表的UserId是以自增长的方式进行添加的,所以在用hibernate写方法的时候,它会自动增加UserId的值,且给它赋值为0,然后报错
在这里插入图片描述
ERROR: 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘User’ 中的标识列插入显式值。

写的service方法什么的并没有添加UserId的步骤

	//添加user
	@Override
	public User creatUser(String Name, String Email, String Hash, boolean Enable,String Operations) {
		User user = new User();
		user.setLoginName(Email);
		user.setLoginPassword(Hash);
		user.setName(Name);
		user.setEnable(true);
		user.setOperations("1");
		return userDao.save(user);
	}

console里面打出来的结果里,insert语句中含有UserId,且UserId的值在Variables里面显示的是0

Hibernate: 
    insert 
    into
        [
        dbo].[User] (
            Enable, Name, Operations, Email, Hash, UserId
        ) 
    values
        (?, ?, ?, ?, ?, ?)

对于这种情况,我们需要在User实体类中添加一个注释
@GeneratedValue(strategy = GenerationType.IDENTITY)
应该会导入一个相对于的包import org.hibernate.annotations.GenericGenerator;

关于@GeneratedValue注释,@GeneratedValue注解的strategy属性提供四种值:
IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
AUTO: JPA自动选择合适的策略,是默认选项;
SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

加入注释之后,sql语句里就不会添加UserId了

Hibernate: 
    insert 
    into
        [
        dbo].[User] (
            Enable, Name, Operations, Email, Hash
        ) 
    values
        (?, ?, ?, ?, ?)

你可能感兴趣的:(个人知识收集)