你的Guestbook数据表里面的主健 id 是自增长的吗?极有可能使你忘了让它自增长了
解决方案 »
- java定义长度不固定的数组
- java.net.SocketException: Socket closed
- 不是高手不要来看 关于java和java虚拟机的问题 大家可一起讨论
- hibernate问题,请求帮助
- JSTL 标签 ${fn:replace()}的问题(为了解决换行显示的问题)
- 怎么样用java 把指定的文件压缩成zip文件,提供下载?
- tomcat连接池的程序怎么在jbuilder里开发[如何在开发环境中配置连接池]
- 小弟刚学JAVA 下面一个程序请大家帮忙
- 关于密码验证输入框的问题!
- JSP更改图片后无法显示
- 学EJB,还是学Struts+Spring+Hibernate
- Struts2 Annotation : 使用注释的方式如何为Action指定拦截器
<column name="id" />
<generator class="assigned" />
</id> 试试,嘿嘿不过这样很容易主键冲突一般都不这么做
<column name="id" />
<generator class="native" />
</id>
好像你不是设置自增的值吧?The database returned no natively generated identity value 翻译过来就是:数据库返回的不是一个自增的值.
映射<generator class="native" /> 不对,native是自动增长的
这个说明你的主键生成机制有错误,native机制是根据数据库底层选择identity, sequence 或者hilo 的一种,
对于MySql 选择的应该是identity,
但是按你插入的方式,主键生成策略应该是assigned。
你不妨试试。
<column name="id" />
<generator class="assigned" />
</id>
既然你不想自动增长,就不要用native
gb.setUsername("zhou");
gb.setPassword("123");
t.begin();
session.save(gb);
t.commit();在插入时,gb.setId(711),这种做法是错误的,因为你的Guestbook.hbm.xml
中的id生成是native类型的,相对于mysql就是increase,相对于ORACLE就是suquence (哈,单词不会打了,就是mysql是自动增长,oracle是序列)
就是说id由数据库自己生成,在插入时不能指定,一般在POJO中,都把setId设置为private不允许外界设置
也就是说你在插入操作时,不需要setId:
gb.setUsername("zhou");
gb.setPassword("123");
t.begin();
session.save(gb);
t.commit();
即可
不过如果是想自己设置ID才用的native,那么换:<generator class="assigned"/> 看看吧
<column name="id" />
<generator class="native" />
</id>
NATIVE是根据数据库底层自动判断是使用identity\hilo\sequence,然后自动生成键值添加到数据库。不是你想填什么值就可以填的
如果你想自己填值,就改成<generator class="assigned"/>