为什么Hibernate将外键设置为空值?

为什么Hibernate将外键设置为空值?,hibernate,Hibernate,我使用的是Hibernate3.0.5、Java6和MySQL 5.5。我以为我把一切都安排好了,但显然我没有 以下是类映射: <class name="com.rc.model.partner.Partner" table="partner"> ... <set name="pacChannelSet" table="pac_channel" lazy="false" cascade="all"> <key column="part

我使用的是Hibernate3.0.5、Java6和MySQL 5.5。我以为我把一切都安排好了,但显然我没有

以下是类映射:

<class name="com.rc.model.partner.Partner" table="partner">
    ...
    <set name="pacChannelSet" table="pac_channel" lazy="false" cascade="all">
        <key column="partnerid"/>
        <one-to-many class="com.rc.model.partner.PacChannel"/>
    </set>
</class>

<class name="com.rc.model.partner.PacChannel" table="pac_channel">
    ...
    <many-to-one name="partner" class="com.rc.model.partner.Partner" column="partnerid"
                 foreign-key="partnerid" cascade="none"/>
</class>
以下是调试语句,表示有人试图将pac_通道表中的partnerid置零,并导致错误:

11:27:07,088 DEBUG [SQL] update partner set ... where partnerid=? and updateddate=?
11:27:07,165 DEBUG [SQL] update pac_channel set partnerid=?, channelname=?, apikey=?, active=?, dailyrequestlimit=? where pacchannelid=?
11:27:07,193 DEBUG [SQL] update pac_channel set partnerid=?, channelname=?, apikey=?, active=?, dailyrequestlimit=? where pacchannelid=?
11:27:07,300 DEBUG [SQL] update pac_channel set partnerid=null where partnerid=? and pacchannelid=?
11:27:07,413 ERROR [JDBCExceptionReporter] Cannot add or update a child row: a foreign key constraint fails (`mexp`.`pac_channel`, CONSTRAINT `chan_partnerid_fk` FOREIGN KEY (`partnerid`) REFERENCES `partner` (`partnerid`) ON DELETE NO ACTION ON UPDATE NO ACTION)

为什么Hibernate会生成最后一个set partnerid=null的SQL语句?如有任何见解,将不胜感激。谢谢

我从不使用XML映射实体,但我认为您的映射是错误的。单侧应为多侧的反向侧,如所示:

11:27:07,088 DEBUG [SQL] update partner set ... where partnerid=? and updateddate=?
11:27:07,165 DEBUG [SQL] update pac_channel set partnerid=?, channelname=?, apikey=?, active=?, dailyrequestlimit=? where pacchannelid=?
11:27:07,193 DEBUG [SQL] update pac_channel set partnerid=?, channelname=?, apikey=?, active=?, dailyrequestlimit=? where pacchannelid=?
11:27:07,300 DEBUG [SQL] update pac_channel set partnerid=null where partnerid=? and pacchannelid=?
11:27:07,413 ERROR [JDBCExceptionReporter] Cannot add or update a child row: a foreign key constraint fails (`mexp`.`pac_channel`, CONSTRAINT `chan_partnerid_fk` FOREIGN KEY (`partnerid`) REFERENCES `partner` (`partnerid`) ON DELETE NO ACTION ON UPDATE NO ACTION)
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address" 
        column="addressId"
        not-null="true"/>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <set name="people" inverse="true">
        <key column="addressId"/>
        <one-to-many class="Person"/>
    </set>
</class>