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增长策略修改.

  123100_KKbm_2011331.png

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

 123659_CKOA_2011331.png

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

123841_8SCg_2011331.png

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

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

124315_OojX_2011331.jpg

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

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

124644_wxWT_2011331.png

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

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

125250_NeET_2011331.png

插入数据成功。

转载于:https://my.oschina.net/u/2011331/blog/407171

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值