现有Class Check,ManagerCheck,MDCheck.其中ManagerCheck 和 MDCheck继承Check,每个子类一张表(Table per subclass)映射。
数据库有一条Check记录和其通过主键关联的ManagerCheck,现在我想新建一个MDCheck并持久化该怎么做?

解决方案 »

  1.   

    问题补充:我new 一个MDCheck ,但我saveOrUpdate时出错
    2011-1-28 11:21:57 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
    严重: Could not synchronize database state with session
    org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):其中ManagerCheck 和MDCheck中都有一个TimeStamp属性  
      

  2.   

    <class name="Check" table="t_check" catalog="pfa">
            <id name="checkId" column="app_id">
                <generator class="foreign">
                <param name="property">appForm</param>
             </generator>
            </id>
        <one-to-one name="appForm"  lazy="false"
            constrained="true"/>         
            <many-to-one name="state" class="FormState" lazy="false">
                <column name="state_id" />
            </many-to-one>
            <property name="curLv" type="java.lang.Integer">
                <column name="curLv" />
            </property>
            
            <property name="reworkReason" type="java.lang.String">
                <column name="reason" />
            </property>
            
            <property name="lv" type="java.lang.Integer">
                <column name="Lv" />
            </property>
            <property name="lastProccess" type="java.lang.Integer">
                <column name="lastProccess" />
            </property>
            
            <joined-subclass name="ManagerCheck" table="t_mgrCheck">
             <key column ="app_id"/>
    <property name="reason" type="java.lang.String" column="reason"></property>
    <property name="time" type="java.sql.Timestamp" column="check_time"></property>
    <!-- 映射和Operation之间的关联关系 -->
    <many-to-one name="operate" column="operate_id"
    class="Operation" lazy="false"/>
    </joined-subclass>

    <joined-subclass name="ManagerDirectorCheck" table="t_mdCheck">
    <key column="app_id"/>
    <property name="reason" type="java.lang.String" column="reason"/>
    <property name="time" type="java.sql.Timestamp" column="check_time"></property>
    <!-- 映射和Operation之间的关联关系 -->
    <many-to-one name="operate" column="operate_id"
    class="Operation" lazy="false"/>
    </joined-subclass>

    <joined-subclass name="MDDirectorCheck" table="t_mddCheck">
    <key column="app_id"/>
    <property name="reason" type="java.lang.String" column="reason"/>
    <property name="time" type="java.sql.Timestamp" column="check_time"></property>
    <!-- 映射和Operation之间的关联关系 -->
    <many-to-one name="operate" column="operate_id"
    class="Operation" lazy="false"/>
    </joined-subclass>

    <joined-subclass name="PCDirectorCheck" table="t_pcdCheck">
    <key column="app_id"/>
    <property name="reason" type="java.lang.String" column="reason"/>
    <property name="time" type="java.sql.Timestamp" column="check_time"></property>
    <!-- 映射和Operation之间的关联关系 -->
    <many-to-one name="operate" column="operate_id"
    class="Operation" lazy="false"/>
    </joined-subclass>
        </class>
      

  3.   

    Check check=checkDao.get(checkId);
    ManagerCheck mcheck=(ManagerCheck)mcheckDao.get(AppId)
    if(mcheck!=null)
    {
       mcheck.setOperate(operate);
       mcheck.setReason(reason);
       mcheck.setTime(new Timestamp(System.currentTimeMillis()));
       mcheck.setCurLv(MANAGERDIRECTOR_LV);
    mcheckDao.saveOrupdate(mcheck);
    ManagerDirectorCheck mdCheck=new ManagerDirectorCheck(check);
    mdCheck.setTime(mcheck.getTime());
    mdcheckDao.saveOrupdate(mdCheck);
    }