这一段转载自:http://blog.csdn.net/cRyIng_gG/article/details/1521300
异常信息:
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():
异常原因:
<id>元素配置不正确,<id>元素缺少其子元素<generator></generator>的配置。
解决方法:
<id>元素映射了相应数据库表的主键字段,对其子元素<generator class="">,其中class的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hibernate参考文档,一般取其值为native 。
exp:
<hibernate-mapping>
<class name="com.fqf.Vipdata" table="vipdata" catalog="test">
<id name="vipId" type="java.lang.Integer">
<column name="vipId" />
<generator class="assigned" />
</id>
<property name="vipName" type="java.lang.String">
<column name="vipName" length="20" not-null="true" />
</property>
<property name="vipTitle" type="java.lang.String">
<column name="vipTitle" length="20" not-null="true" />
</property>
</class>
</hibernate-mapping>
看看数据库表中的 id 是不是自增长类型,把<generator class="assigned" />中assigned改为increment
(vipId的类型为自增长)
这一段转载自:http://ethip.iteye.com/blog/201035
错误篇1:
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): ***(POJO类,及持久化类名)
分析及解决:
你要操作的数据表中的id(即主键)的类型设置成了“自动增长类型”,而在你的
User.hbm.xml中,id的生成方式是assigned,即
<id name="id" type="integer">
<column name="id" />
<generator class="assigned" />
</id>
这种搭配是矛盾的!
主键的assigned生成方式由程序自动生成表的主键,即在你的测试程序中要调用setId()方法,且必
须在调用save()前调用(或者说在调用save()前必须指定id,其实就是说,主键值不能为空!)。
把主键的生成方式改为native,它的特征是能够根据底层数据库自动选择主键生成方式。
下面原创
Hibernate持久化类和关系型数据库之间的映射通常是用一个XML文档来定义的,默认文件名问XXX.hbm.xml .该文档通过一系列XML元素的配置,来将持久化类和数据库表之间建立一一映射。这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义。
当然我们可以使用middlegen插件自动根据数据库表生成xml文件,和javabean文件。
样例文件如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="com.demo.hibernate.beans.User"
table="users"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="native" />
</id>
<property
name="username"
type="java.lang.String"
column="username"
not-null="true"
length="32"
/>
<property
name="password"
type="java.lang.String"
column="password"
not-null="true"
length="32"
/>
<!-- Associations -->
</class>
</hibernate-mapping>
详细定义了表中数据的配置,要求。
映射文件的根元素:<hibernate-mapping> 映射文件的根元素是<hibernate-mapping> 每一个hbm.xml文件都有唯一的一个根元素。该元素包含一些可选的属性。。。。。。。
使用<class>定义类,<class>是<hibernate-mapping>的子元素,用以定义一个持久化类与数据库表的映射关系。该元素也是包含一些可选属性的。。。。。。。。。。。。
上面用到的有name属性:持久化类或者接口的全限定名,如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。
table 属性:对应的数据库表名,默认的是类的非全限定名。
例如上面的配置定义了一个映射,映射的类名为User,表名为user
另外id定义主键generator设置主键生成方式。未完待续。。。。。。。。。。。。