说明你表中的主键已经设定为标志列,那么在映射文件的时候就不能再设定为increment,改过来就可以了,如果修改表后还不行,那么删掉映射文件重新映射。
解决方案 »
- GWT-EXT中无法打开文件等?老出错呢
- 再呼吁开个Java webservice板块
- 看了别人写的一个HashMap其中有句看不懂,有人帮我指点下吗?
- 新手发问:关于一对多的实现问题,请大家帮助!!!
- webwork与spring的关系,困惑啊!大家帮忙
- spring+Jpa(hibernate)整合 初始化配置文件后 不会根据映射文件生成对应的数据库
- 新手请教一个问题
- hibernate 初学问题:我这个列子怎么连编译都通不过啊? 多谢大家进来看看。
- tomcat4.1的问题
- 可以将一个JComponent设置成透明吗?
- spring结合hibernate后如何获取Session啊?
- 哪位大哥借个网络空间让我上传一个jsp的项目
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment"></generator>
</id>
这是由于你在映射one-to-one关联时用了共同的主键,想象一下应该是这样:hibernate首先往数据库中插入主表的数据,该id由数据库产生,然后hibernate将该id值取出作为从表的id值,这样才能实现主从表的对应关系,再往数据库中插入从表数据,然后自然就出现上面的错误了。
你可以改变id的生成方式,数据库中从表的id字段不用指定为内部自增型。(试一下)
或者id由hibernate自动产生,如uuid类型。
或者主从表不要用共同的主键,改变映射方式类似如下:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
unique="true"
not-null="true"/>
</class><class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<one-to-one name="person"
property-ref="address"/>
</class>
这是hibernate参考中推荐的方法之一,address为主,person为从,id由数据库产生。