表面上看来好象是强制类型转换出了问题...但是错误信息实在太少了...不过我估计问题出在这里 你的author类里同时有:
private int id;
private String authorid;无论你这个author对象与其他对象是什么关系,用于映射的String authorid字段都绝对不应该在author对象本身中...另外一个很重要的问题:int id ... 我记得我用hibernate时标识符好象都是用的String哦 我不太清楚这与你用的关系数据库有没有关系...但是最好还是用String吧..因为Hibernate生成的唯一标识是32位长的16进制的...换言之...里面会有ABCDEF...你用int来保存恐怕不太妥当...

解决方案 »

  1.   

    表面上看来好象是强制类型转换出了问题...但是错误信息实在太少了...  我感覺關於這一點,只要把pojo中的id的type改成Long就知道是不是這個問題了.不過,我感覺好像不是這個問題.可能是主健生成的問題.由於沒有生成相應的id,實際上執行的sql語句就相當於:Hibernate: insert into author (alias, id) values (insertValue, null);但是,這個語句其實還沒有執行,因為,在把null轉化成Long的時候發生了一個java.lang.ClassCastException.我想可能是這樣子的.
    我建議你把<generator class="foreign">
                  <param name="property">person</param>
                </generator>
            中的"foreign"改成assign然後自己指定一個id值就知道是不是上面的錯誤了.  水平有現,僅供參考!
      

  2.   

    <generator class="identity"/>
    改成
    <generator class="uuid.hex"/>
    试试
      

  3.   

    to  zhufanamo(泡泡~~) <generator class="identity"/>
    改成这样改是可以的;但是ID在数据库中就会出现:2c0fa968fe51c3fa00fe51ce2c4d0026
      

  4.   

    主键最好是Integer,可以避免很多麻烦。
      

  5.   

    to  bon_jovi(西门疯雪)你是说在.JAVA 中还是在.xml中设置主键为Integer呢???可以具体说清楚吗?
      

  6.   

    我现在把程序改成这样:Author.javapackage goodok;
    import java.util.*;
    public class Author{    private String alias = null;
        private Person person = null;
        private long authorid;
        /**
         * @return
         */
        public String getAlias() {
            return alias;
        }    /**
         * @return
         */
        public Person getPerson() {
            return person;
        }    /**
         * @param string
         */
        public void setAlias(String string) {
            alias = string;
        }
        /**
         * @param person
         */
        public void setPerson(Person person) {
            this.person = person;
        }
      public long getAuthorid() {
        return authorid;
      }
      public void setAuthorid(long authorid) {
        this.authorid = authorid;
      }}
    Person.javapackage goodok;
    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */
    public class Person {    private String name = null;
        private String email = null;
        private long personid;    public Person(){}    /**
         * @return
         */
        public String getEmail() {
            return email;
        }    /**
         * @return
         */    /**
         * @return
         */
        public String getName() {
            return name;
        }    /**
         * @param string
         */
        public void setEmail(String string) {
            email = string;
        }
        public void setName(String string) {
            name = string;
        }
      public long getPersonid() {
        return personid;
      }
      public void setPersonid(long personid) {
        this.personid = personid;
      }}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="personid"
    column="id"
      type="java.lang.Long"
    length="10">
    <generator class="identity"/>
    </id>
            <property name="name" column="name" />
            <property name="email" column="email" />
        </class>
    </hibernate-mapping>
    Author.hbm.xml<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
    <hibernate-mapping>
        <class name="goodok.Author" table="author" >
             <id name="authorid"
    column="id"
      type="java.lang.Long"
    length="10">
                <!-- 这里我把author作为主表,外键的描述也可以在Person.hbm.xml中表述,也是可以的-->
                <generator class="foreign">
                  <param name="property">person</param>
                </generator>
            </id>        <property name="alias" column="alias" />
            <one-to-one name="person" class="goodok.Person" cascade="all" constrained="true" />
        </class>
    </hibernate-mapping>
    在执行的时候出现这样的错误:
      

  7.   

    Hibernate: insert into author (alias, id) values (?, ?)
    Hibernate: update person set name=?, email=? where id=?
    11:06:43,156 ERROR SessionImpl:2343 - Could not synchronize database state with session
    net.sf.hibernate.HibernateException: Batch update row count wrong: 0
    at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:65)
    at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:122)
    at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2385)
    at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
    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:131)
    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)
    StandardWrapperValve[debugjsp]: Servlet.service() for servlet debugjsp threw exception
    javax.servlet.ServletException: Batch update row count wrong: 0
    javax.servlet.ServletException: Batch update row count wrong: 0
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:471)
    at org.apache.jsp.test1$jsp._jspService(test1$jsp.java:147)
    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)