Hibernate报错:XXX for this class must be manually assigned before calling save():

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

你可能感兴趣的:(Hibernate,jsp)