问题描述: SSH框架开发中,Hibernate查询SQLServer中的数据没有问题,但是插入数据会报错。
报错:could not fetch initial value for increment generator;对象名 'users' 无效。
users是我的数据库表,主键id自增长.
建表语句为:
create table users(
id int not null identity(1,1) ,
username varchar(20) not null unique,
password varchar(20) not null,
constraint pkid primary key (id)
);
解决方法:
把hibernate的映射文件Users.hbm.xml的主键id增长策略修改.
关于hibernate的generator属性,可以参考这篇文章。http://blog.sina.com.cn/s/blog_9f60f9210102ved0.html
查找原因:
1 先在hibernate.cfg.xml文件中加入2条配置语句,让hibernate输出SQL语句
<property name="hibernate.show_sql">true</property><!-- 配置显示sql语句 -->
<property name="format_sql">true</property><!-- 让输出的sql语句格式化 -->
当generator 属性值为increment时,部署项目,插入数据,控制台输出:
说明hibernate会先从表中找到最大ID,然后将id加1,将数据存入数据库。
2当前我的数据库中最大id为3,自己构造id为4 的插入语句.
数据库报错了,说明显式插入id值不行。(主键自增长时,MySQL中却可以显式插入id值)
我们去掉id字段后,重新插入。
发现插入成功了,由此我们想到将generator 属性值为native。
3改为native后,重新部署项目。插入数据:控制台输出:
插入数据成功。