如果你的数据库是mysql,要用identity,然后到mysql的控制台把AUTO_INCRMENT选上。
author表<generator class="foreign">没有用过。
如果是Oracle数据库
<generator class="sequence">
                <param name="sequence">S_BUYER_INFO</param>
</generator>
要用序列生成器,还需要在Oracle数据库控制台里为每一张表增加一个sequence。这里为buyer表增加的序列叫做S_BUYER_INFO。

解决方案 »

  1.   

    identity
    supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type long, short or int. sequence
    uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type long, short or int uuid.hex
    uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32. 
      

  2.   

    我一般都用native,各位一般用什么?
      

  3.   

    各位的意思是不是:我把:<generator class="uuid.hex"/>
    改成:<generator class="native"/> 或者<generator class="identity"/>
    我改了;也上试过了;可是还是不正确,到底是什么原因呢????
    我改如何去改正呢????????????????????
      

  4.   

    用identity,要把mysql的控制台里的数据库属性的AUTO_INCRMENT选上。
      

  5.   

    用identity,要把mysql的控制台里的数据库属性的AUTO_INCRMENT选上。
    我都做了的;person表(id,name,email)
    author表(id,alias)现在只能向person中添加数据;而不能向author中添加数据,我把person.hbm.xml:<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>
    <class name="goodok.Person" table="person"><id name="id"
    column="id"
    type="long"
    length="10">
    <generator class="identity"/>
    </id><property name="name"
    column="name"
    type="java.lang.String"
    length="200"
    update="false" insert="false"
    not-null="true">
    </property><property name="email"
    column="email"
    type="java.lang.String"
    length="200">
    </property>
    </class>
    </hibernate-mapping>还是不行;难道one-to-one的问题真的要两次save吗???打出的问题:Hibernate: insert into person (email) values (?)10:24:19,593 ERROR BasicPropertyAccessor:60 - IllegalArgumentException in class: goodok.Person, setter method of property: id10:24:19,593 ERROR BasicPropertyAccessor:64 - expected type: java.lang.String, actual value: java.lang.Long
      

  6.   

    你看看我的:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>
    <class name="com.unida.egov.lane.hibernate.entity.User" table="t_user">
    <id column="f_user_pkid" length="20" name="userPkid" type="long">
    <generator class="identity"/>
    </id>
    <property column="f_user_id" length="100" name="userId" not-null="true" type="string" unique="true"/>
    <property column="f_password" length="100" name="password" not-null="true" type="string"/>
    <property column="f_name" length="100" name="name" not-null="true" type="string"/>
    <property column="f_level" length="100" name="level" not-null="true" type="string"/>
    <property column="f_visit" length="100" name="visit" not-null="true" type="string"/>
    </class>
    </hibernate-mapping>还要提醒一点,实体类的属性里不要出现叫做id的属性,表里边也不要有,否则会出错。
    一张表里必须有一个主键,我这里的主键叫做f_user_pkid,实体里的属性叫做userPkid。
    然后有一个用户编号,表里叫做f_user_id,实体里叫做userId,然后才是用户名等其它内容。
    我看你的表只有一个主键id,然后就是用户名了,那你的用户编号是哪个?如果是主键id就错了。因为使用了生成器以后主键的值是自动生成的,你可别把用户的编号手动设置进去。
    主键id一直是自动增加,不允许修改的,用户的编号要另外做一个字段来存储。
    在你的表属性里,记得要指定你的主键是哪个字段。
      

  7.   

    还有你的异常问题,实体里的主键你用了long,在MySQL数据库里要用double才行,不能用String的。
      

  8.   

    to IceCraft(心淡情浓) 
     
    首先很感谢你;那你的意思是我建数据库应该这样:person表(id,personid,name,email)(personid 为主键)
    author表(id,autorid,alias)(autorid为主键 )是这样吗??生成器生成的不能当着主键来用,每个表都要有自己的主键,而生成器生产的ID就没有作用了?
      

  9.   

    IllegalArgumentException in class: goodok.Person, setter method of property: id这句话的意思是应该把goodok.Person中的id设置成int吧,我把它设置了;现在出现了这样的异常:Hibernate: insert into author (alias, id) values (?, ?)StandardWrapperValve[debugjsp]: Servlet.service() for servlet debugjsp threw exceptionjava.lang.ClassCastExceptionjava.lang.ClassCastException at net.sf.hibernate.type.LongType.set(LongType.java:32) at net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:48) at net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:35) at net.sf.hibernate.persister.EntityPersister.dehydrate(EntityPersister.java:399) at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:466) at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:442) at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:29) at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382) at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2335) at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204) at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61) at goodok.HibernateBase.endTransaction(HibernateBase.java:54) at goodok.PersonBean.addPerson(PersonBean.java:32) at org.apache.jsp.test1$jsp._jspService(test1$jsp.java:132) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125) at java.lang.Thread.run(Thread.java:536)什么原因呢????我该如何去改???
      

  10.   

    id的属性值在mysql可不可以是汉字呢,我解决了乱码问题,可当我在对表的键插入汉字成功了,但select时却报错。
      

  11.   

    那你的意思是我建数据库应该这样:
    person表(id,personid,name,email)(personid 为主键)
    author表(id,autorid,alias)(autorid为主键 )
    是这样吗??
    生成器生成的不能当着主键来用,每个表都要有自己的主键,而生成器生产的ID就没有作用了?
    to niyboy(JAVA爱好者):
    这里的personid和autorid是你的用户编号吧?那它们都不能是主键,它们是显示给用户使用或者允许修改的值。而hibernate里主键指的是用来与其它表中的字段进行关联的字段,也就是这里的id。比如:一张表示用户表,一张表是用户购物清单表,还有一张是用来关联用户表和购物清单表的关联表:
    用户表:
    userpkid(自动生成)   userid        name       sex       age
    00000001             00001         icecraft   man       22
    00000002             00003         abenmao    man       10
    00000003             00005         ice        woman     20
    购物清单表:
    goodspkid(自动生成)   goodsid       goodsname     buytime      prise
    00000011              00001         thinkinjava   2004-8-16    50
    00000012              00034         jspprogrammer 2004-8-17    100
    关联表:
    usergoodspkid(自动生成)      userpkid           goodspkid
    00000001                     00000001           00000011
    00000002                     00000003           00000012以上说明,用户编号、订单编号都是独立的,可以显示给用户看,甚至允许用户修改的,比如这里的userid和goodsid。
    而用来把几张表关联起来的的字段就是主键或外键了,在用户表中userpkid是主键,在购物清单表中goodspkid是主键,在关联表中usergoodspkid是主键、userpkid和goodspkid是外键。
    看懂了吗,这是数据库设计的一种方式。方式有很多,不过我觉得用在hibernate方面,这种比较好。关系采用one to many或many to one,为每一个表都建立一个映射和实体,多看看hibernate的文档,里边都有介绍。
    注意,字段名称最好不要叫作id,叫做userpkid或者userid都可以。我曾经因为字段名为id出现过很大的麻烦,就是数据无法读写,也不报错,所以建议不要使用id做表字段名和实体属性名。