使用hibernate报错如标题所示,在使用一对多关系映射时,使用测试方法测试save操作。
出现这个错误的原因是数据库主键的定义是自增的方式,且数据库为空或者未创建,此时插入地数据带有主键id信息,便会执行update操作失败。
解决方案:
将插入地数据主键信息置为null
或者改变主键生成策略,将native主键生成策略修改为assigned(用户自定义主键)
相关配置文件如下
User.hbm.xml
<hibernate-mapping package="org.lujx.model">
<class name="User" table="t_user" >
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
<property name="name" column="u_name" length="20" type="string"/>
</class>
</hibernate-mapping>
Group.hbm.xml
<hibernate-mapping package="org.lujx.model">
<class name="Group" table="t_group" >
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
<property name="name" column="u_name" length="20" type="string"/>
<set name="users" cascade="save-update">
<key column="g_id"/>
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>