Java 休眠不必要地更新联接表

Java 休眠不必要地更新联接表,java,hibernate,join,sql-update,Java,Hibernate,Join,Sql Update,基本上,我有两个类p&M,它们对应的表T\U p&T\M,它们以一对多的关系连接起来,一个p有一组Ms。类似这样: <class name="P" table="T_P"> <set name="ms" cascade="all" lazy="false" inverse="true"> <key column="P_ID" not-null="true" foreign-key="FK_M_P"/> <one-t

基本上,我有两个类p&M,它们对应的表T\U p&T\M,它们以一对多的关系连接起来,一个p有一组Ms。类似这样:

<class name="P" table="T_P">
    <set name="ms" cascade="all" lazy="false" inverse="true">
        <key column="P_ID" not-null="true" foreign-key="FK_M_P"/>
        <one-to-many class="M"/>
    </set>
</class>
<class name="M" table="T_M">
    <many-to-one name="p" column="P_ID" foreign-key="FK_M_P" class="P"
                 update="false" not-null="true" cascade="none"/>
</class>

现在,当我对p进行更改并要求Hibernate更新DB时。很可能Hibernate会做一批更新,一次更新到T_P,几次更新到T_M,我知道后面的部分是不必要的,因为我没有更改这些Ms。但我认为,因为我的对象已分离,Hibernate必须更新所有内容


所以我的问题是,在我的例子中,我可以要求Hibernate只进行部分更新,而不进行过多的DB点击吗?或其他建议,以优化这也是赞赏。但这是一个遗留程序,我可能无法进行重大更改。

就映射而言,它只适用于双向关联。 在您的配置中,您没有提到P在M中的映射

<class name="P" table="T_P">
<set name="ms" cascade="all" lazy="false" inverse="true">
    <key column="P_ID" not-null="true" foreign-key="FK_M_P"/>
    <one-to-many class="M"/>
</set>
</class>
<class name="M" table="T_M">
     /*mention mapping for P here, if you want to use inverse property properly*/
</class>

我希望这能帮助你们解决这个问题。

谢谢你们,你们说得对,我忘了提到孩子的父母证明。
/*parent contain set of child entity*/
<set name="children" inverse="true">
<key column="parent_id"/>
<one-to-many class="Child"/>
</set>


/*child has reference of parent*/
<many-to-one name="parent" column="parent_id" not-null="true"/>