如何在hibernate中使用更新级联从DB中删除记录

时间:2014-08-07 14:18:28

标签: hibernate

我想用更新级联删除DB(MySQL)中的记录。

在数据库上有与日计划相关的日计划和一些持续时间计划。我想更新这一天计划的持续时间列表。

  • 当我使用包含新的或更新的持续时间计划的持续时间列表更新日程表时,它可以正常工作,我在数据库上看到这些更新记录。
  • 但是,当我用持续时间列表更新日期计划时,某些持续时间计划丢失(删除)时,没有任何反应。我希望删除缺失的持续时间计划。

实施例

  • 与DB日计划相关的持续时间计划; a,b,c。
  • 我使用包含(已更新),b(未更新)的列表更新日程安排。
  • 我可以在DB上看到    - > '一个'已更新。    - > ' B'没有更新。    - > * ' c'没有被删除! (如何删除此' c'使用此更新级联!)

初​​始化;

...
    DayPlan dayPlan = new DayPlan();
    Set<DurationPlan> list = new HashSet<DurationPlan>();
...

更新的准备工作;

...
    durationPlan = new DurationPlan(dayPlan, x, y, z);
    list.add(durationPlan);
    dayPlan.setDURATION_PLANS(list);
...

使用Hibernate-session更新流程;

...
session.saveOrUpdate(dayPlan);
...

DurationPlan hibernate-mapping;

<class name="planManagement.DurationPlan" table="DURATIONPLAN">
    <id name="DURATION_PLAN_ID" type="int">
        <column name="DURATION_PLAN_ID" />
        <generator class="native" />
    </id>
    <many-to-one name="DAY_PLAN" class="planManagement.DayPlan" lazy="false" fetch="join">
        <column name="DAY_PLAN_ID" not-null="true"/>
    </many-to-one>
    ...
</class>

DayPlan hibernate-mapping;

<class name="planManagement.DayPlan" table="DAYPLAN">
    <id name="DAY_PLAN_ID" type="int">
        <column name="DAY_PLAN_ID" />
        <generator class="native" />
    </id>
    <set name="DURATION_PLANS" table="DURATIONPLAN" inverse="true" cascade="all" lazy="true" fetch="select">
        <key>
            <column name="DAY_PLAN_ID" not-null="true" />
        </key>
        <one-to-many class="planManagement.DurationPlan" />
    </set>
    ...
</class>

所有反馈意见都赞赏!

1 个答案:

答案 0 :(得分:1)

这里的问题是,hibernate将如何找到需要删除的记录?当您致电session.saveOrUpdate(dayPlan);时,其中dayPlan将包含仅包含两个对象的duration列表,即a,b(a(已更新),b(未更新)。)根据您的要求'需要被删除但是hibernate将如何知道'c'需要被删除。