这一段转载自: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设置主键生成方式。未完待续。。。。。。。。。。。。