could not fetch initial value for increment genera

  问题描述: 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增长策略修改.

  could not fetch initial value for increment genera_第1张图片

  关于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语句格式化 -->

 could not fetch initial value for increment genera_第2张图片

 当generator 属性值为increment时,部署项目,插入数据,控制台输出:

could not fetch initial value for increment genera_第3张图片

说明hibernate会先从表中找到最大ID,然后将id加1,将数据存入数据库。

2当前我的数据库中最大id为3,自己构造id为4 的插入语句.

could not fetch initial value for increment genera_第4张图片

数据库报错了,说明显式插入id值不行。(主键自增长时,MySQL中却可以显式插入id值)

我们去掉id字段后,重新插入。

could not fetch initial value for increment genera_第5张图片

发现插入成功了,由此我们想到将generator 属性值为native。

3改为native后,重新部署项目。插入数据:控制台输出:

could not fetch initial value for increment genera_第6张图片

插入数据成功。

你可能感兴趣的:(Hibernate)