我只知道goodok.PersonBean.addPerson(PersonBean.java:32)personbean中第32行开始错了,估计是不是author和person的添加顺序错了?因为看见:Hibernate: insert into author (alias, id) values (?, ?)
Hibernate: update person set name=?, email=? where id=?如果不对不要怪我,呵呵,能不能把相关代码贴出来??

解决方案 »

  1.   

    <%@ page contentType="text/html; charset=GBK" %>
    <%@ page import="java.io.*,java.util.*,goodok.Author,goodok.Person"%>
    <jsp:useBean id="pb" class="goodok.PersonBean" scope="page"/>
    <body bgcolor="#ffffff">
    <%

    String name=request.getParameter("name");
    String email=request.getParameter("email");
    String alias=request.getParameter("alias");
    //person
            Person person=new Person();
    person.setName(name);
            person.setEmail(email); //author
    Author author=new Author();
            author.setAlias(alias);
            author.setPerson(person);
           //操作
    pb.addPerson(author);

    %>
      

  2.   

    摘自hibernate文档:有两种不同的一对一关联: 
    主键关联 
    惟一外键关联 
    主键关联不需要额外的表字段;两行是通过这种一对一关系相关联的,那么这两行就共享同样的主关键字值。所以如果你希望两个对象通过主键一对一关联,你必须确认它们被赋予同样的标识值! 
    比如说,对下面的Employee和Person进行主键一对一关联: 
    <one-to-one name="person" class="Person"/>
    <one-to-one name="employee" class="Employee" constrained="true"/>
    现在我们必须确保PERSON和EMPLOYEE中相关的字段是相等的。我们使用一个特别的称为foreign的Hibernate标识符生成器策略: 
    <class name="person" table="PERSON">
        <id name="id" column="PERSON_ID">
            <generator class="foreign">
                <param name="property">employee</param>
            </generator>
        </id>
        ...
        <one-to-one name="employee"
            class="Employee"
            constrained="true"/>
    </class>
    一个刚刚保存的Person实例被赋予和该Person的employee属性所指向的Employee实例同样的关键字值。
    用foreign生成器试试。
      

  3.   

    另一种方式是一个外键和一个惟一关键字对应,上面的Employee和Person的例子,如果使这种关联方式,应该表达成: 
    <many-to-one name="person" class="Person" column="PERSON_ID" unique="true"/>
    如果在Person的映射加入下面几句,这种关联就是双向的: 
    <one-to-one name"employee" class="Employee" property-ref="person"/>这是第二种方式。
    且看两种方式都需要在两边的映射文件里书写关系,第一种是两个one to one, 第二种是一个是many to one,一个是One to one。而你的person表的映射文件里却没有对Author表的关联描述。
      

  4.   

    to IceCraft(心淡情浓) 谢谢;问题终于解决了;很感谢你的帮助