两个类如下:::
public class Person {
private String id;
private String name;
private String email;
         //对应的get/set方法
}
public class Author {
private String id;
private String alias;
private Person person;
         //对应的get/set方法
}
person.hbm.xml如下
<hibernate-mapping>
<class name="com.hibernate.Person" table="person">
<id name="id" type="string">
<generator class="uuid.hex"/>
</id> <property name="name"/>
<property name="email"/>
</class>
</hibernate-mapping>author.hbm.xml如下:
<hibernate-mapping>
<class name="com.hibernate.Author" table="author">
<id name="id" column="id">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="alias" type="string"/>
<one-to-one name="person" class="com.hibernate.Person" cascade="all" constrained="true"/>
</class>
</hibernate-mapping>测试如下::
Person p = new Person();
Author a = new Author(); p.setName("cncomp");
p.setEmail("[email protected]");
a.setAlias("pomfret");
a.setPerson(p); Session s = sf.openSession();
Transaction tx = s.beginTransaction(); s.save(a); tx.commit();
s.close();
sf.close();
可总是出现如下错误::
org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: person
org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:38)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:445)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:440)
com.hibernate.TestHibernate.doGet(TestHibernate.java:26)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)请问该如何解决呀.多谢了.
我都找了好几个小时了.帮帮忙了兄弟们.
如果改成双向关连,该如何修改.

解决方案 »

  1.   

    对了数据库表如下::
    person表:
    create table person(id varchar(20) primary key not null, name varchar(20), email varchar(20));author表:
    create table person(id varchar(20) primary key not null, alias varchar(20));
      

  2.   

    constrained="true"
    表明主控表的主键上存在一个外键
    (foreign key)对其进行约束。这个选
    项关系到save、delete等方法的级联操
    作顺序。
    你没有设外键,把constrained改成"false" 试试