Oracle 数据库 create table person(
id number primary key references passport(id),
name varchar2(20),
age number
);
create table passport(
id number primary key
);create sequence passport_seq
increment by 100000
start with 1;Passport.hbm.xml 配置<hibernate-mapping>
    <class name="com.xt.Passport" table="PASSPORT" schema="SYSTEM">
        <id name="id" type="java.lang.Long" column="ID" >
            <generator class="sequence">
            <param name="sequence">passport_seq</param>
            </generator>
        </id>
       <one-to-one name="Person" class="com.xt.Person" cascade="all"></one-to-one>
    </class>
</hibernate-mapping>
Person.hbm.xml 配置<hibernate-mapping>
    <class name="com.xt.Person" table="PERSON" schema="SYSTEM">
        <id name="id" type="java.lang.Long" column="ID" unsaved-value="0">
            <generator class="foreign">
               <param name="property">ID</param>
            </generator>
        </id>
        <one-to-one name="passport" class="com.xt.Passport" constrained="true" cascade="all"/>     
        <property name="name" type="java.lang.String">
            <column name="NAME" length="20" />
        </property>
        <property name="age" type="java.lang.Long">
            <column name="AGE" precision="22" scale="0" />
        </property>
    </class>
</hibernate-mapping>
异常:Exception in thread "main" org.hibernate.HibernateException: Unable to resolve property: ID
at org.hibernate.tuple.entity.EntityMetamodel.getPropertyIndex(EntityMetamodel.java:439)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValue(AbstractEntityTuplizer.java:286)
at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:3586)
at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:39)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at com.xt.Operator.add_Passport_Person(Operator.java:21)
at com.xt.Operator.main(Operator.java:27)

解决方案 »

  1.   


    Person.hbm.xml 配置写错了<hibernate-mapping>
      <class name="com.xt.Person" table="PERSON" schema="SYSTEM">
      <id name="id" type="java.lang.Long" column="ID" unsaved-value="0">
      <generator class="foreign">
      <param name="property">passport</param>
      </generator>
      </id>
      <one-to-one name="passport" class="com.xt.Passport" constrained="true" cascade="all"/>  
      <property name="name" type="java.lang.String">
      <column name="NAME" length="20" />
      </property>
      <property name="age" type="java.lang.Long">
      <column name="AGE" precision="22" scale="0" />
      </property>
      </class>
    </hibernate-mapping>
      

  2.   

    帮吗解决一些:
    Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: passport
      

  3.   

    我用nhibernate也遇到这样的问题