首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >remove collection with delete-孤立不使用null赋值?:(

remove collection with delete-孤立不使用null赋值?:(
EN

Stack Overflow用户
提问于 2011-01-23 04:09:17
回答 2查看 6.6K关注 0票数 6

通过级联delete-orphan删除另一个实体时出现问题。当我清除关联的集合集合时,它会起作用,但当我将集合集合设为空时,它就不起作用了。让我详细解释一下。配置代码片段:

代码语言:javascript
复制
<class name="com.sample.CategoriesDefault" table="cats">
  <id name="id" column="id" type="string" length="40" access="property">
     <generator class="assigned" />
  </id>
  <version name="version" column="objVrs"  unsaved-value="negative"/>

 <set name="bla" lazy="false" cascade="all-delete-orphan" inverse="true">
      <key column="idCats" not-null="true"/>
       <one-to-many class="com.sample.BLA"/>
 </set>

<class name="com.sample.BLA" table="blaTEST">
   <id name="id" column="id" type="string" length="40" access="property">
     <generator class="assigned" />
   </id>
   <version name="version" column="objVrs"  unsaved-value="negative"/>
   <property name="bla" type="string" column="bla"/>
   <many-to-one name="parent" class="com.sample.CategoriesDefault" column="idCats" not-null="true"/>
</class>

我的示例代码:

代码语言:javascript
复制
Categories cats = new CategoriesDefault();
final Set<BLA> col = new HashSet<BLA>();
col.add(new BLA(cats));
cats.setBla(col);
cats.saveOrupdate(); // will update/insert it in the db.

下面的工作是正确的,即:所有的集合项都从数据库中移出。

代码语言:javascript
复制
cats.getBla().clear();
cats.saveOrUpdate();

我认为这是可行的,因为在调用此方法时,Hibernate的PersistSet被标记为脏。

然而,下面的代码并不像我所期望的那样像上面那样工作。

代码语言:javascript
复制
cats.setBla(null);
cats.saveOrUpdate();

如果我从数据库重新加载cats项,它仍然包含BLA项,并且Hibernate不会生成delete语句:(..为什么不呢??..。或者这是一个bug?我使用的是3.6.0。using。

EN

Stack Overflow用户

发布于 2011-01-23 04:27:05

我认为这是因为hibernate使用了它自己的集合实现(这就是为什么文档说您必须将集合声明为接口,而不是实现),并且集合实现遵循您的传递性持久性设置的语义。所以,当你这样做的时候

代码语言:javascript
复制
cats.getBla().clear()

getBla()部分是hibernate集合实现,它知道在调用clear()时从会话中删除孩子。

当你这样做的时候

代码语言:javascript
复制
cats.setBla(null);

您尚未移除该集合,您已将父集合的引用更改为null。该集合可能仍存在于会话中。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4770262

复制
相关文章

相似问题

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