当我尝试运行以下代码时,我有一个名为DashboardPage的实体,其中包含一个DashboardPageItem列表:
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();
}
}
}我收到这个错误消息:
deleted object would be re-saved by cascade (remove deleted object from associations): [com.dashboard.entity.DashboardPage#22]当我在谷歌上搜索类似的问题时,我发现我必须使用session.delete(),但这将从数据库中删除对象,我只想从列表中删除它。
这是我的类的hbm:
DashboardPage:
<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:
<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),它将保存我所做的所有修改。
发布于 2017-03-01 00:11:07
如果您只想级联由session.delete()显式调用的删除,则不要这样做:
cascade="all,delete-orphan"仅使用
cascade="all"delete-孤立层叠属性的工作方式是,当您简单地从托管集合中移除项时。它在事务结束时被删除。
https://stackoverflow.com/questions/42513527
复制相似问题