首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从关联中移除已删除的对象,但不将其从数据库中移除

从关联中移除已删除的对象,但不将其从数据库中移除
EN

Stack Overflow用户
提问于 2017-03-01 00:05:11
回答 1查看 355关注 0票数 1

当我尝试运行以下代码时,我有一个名为DashboardPage的实体,其中包含一个DashboardPageItem列表:

代码语言:javascript
复制
for(DashboardPage dp : dashboard.getPages()){
            if(dp.getIndex() == dashboardPage.getIndex()){
                dp.getDashboardPageItems().clear();
                Iterator<DashboardPageItem> itDashboardPageItem = dp.getDashboardPageItems().iterator();
                while (itDashboardPageItem.hasNext()) {
                   DashboardPageItem dpi = itDashboardPageItem.next();
                   itDashboardPageItem.remove();
                }

            }
        }

我收到这个错误消息:

代码语言:javascript
复制
deleted object would be re-saved by cascade (remove deleted object from associations): [com.dashboard.entity.DashboardPage#22]

当我在谷歌上搜索类似的问题时,我发现我必须使用session.delete(),但这将从数据库中删除对象,我只想从列表中删除它。

这是我的类的hbm:

DashboardPage:

代码语言:javascript
复制
<class name="DashboardPage" table="t_dashboard_page_dpa">
        <id name="id" column="dpa_id">
            <generator class="native"/>
        </id> 

        <property name="name" column="dpa_name"/>
        <property name="index" column="dpa_index"/>
        <property name="model" column="dpa_model"/>

        <many-to-one name="dashboard" 
                     column="fk_das_id"
                     foreign-key="das_id"
                     not-null="false"
                     lazy="false"/>

        <bag table="t_dashboard_page_item_dpi" name="dashboardPageItems" inverse="true" lazy="true" cascade="all,delete-orphan">
            <key column="fk_dpa_id" not-null="true" unique="false" foreign-key="dpa_id"/>
            <one-to-many class="com.lomaco.cloud.DashboardPageItem"></one-to-many>    
        </bag>


    </class>

DashboardPageItem:

代码语言:javascript
复制
<class name="DashboardPageItem" table="t_dashboard_page_item_dpi">
        <id name="id" column="dpi_id">
            <generator class="native"/>
        </id> 

        <property name="position" column="dpi_position"/>

        <many-to-one name="dashboardPage" 
                     column="fk_dpa_id"
                     foreign-key="dpa_id"
                     not-null="false"
                     lazy="false"
                    cascade="all"/>

        <many-to-one name="widget" 
                     column="fk_wid_id"
                     foreign-key="wid_id"
                     not-null="false"
                     lazy="false"/>

    </class>

我该如何解决这个问题呢?

编辑:

这段代码只是我正在做的事情的一部分,所以我不希望数据库受到我所做的更改的影响,但在另一部分,我想调用session.save(dashboard),它将保存我所做的所有修改。

EN

回答 1

Stack Overflow用户

发布于 2017-03-01 00:11:07

如果您只想级联由session.delete()显式调用的删除,则不要这样做:

代码语言:javascript
复制
cascade="all,delete-orphan"

仅使用

代码语言:javascript
复制
cascade="all"

delete-孤立层叠属性的工作方式是,当您简单地从托管集合中移除项时。它在事务结束时被删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42513527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档