首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate中出现异常(不要使用cascade=“all-delete-orphan”更改对集合的引用)

Hibernate中出现异常(不要使用cascade=“all-delete-orphan”更改对集合的引用)
EN

Stack Overflow用户
提问于 2011-05-05 20:39:05
回答 4查看 15.6K关注 0票数 0

我在hibernate中遇到了一个奇怪的问题。我在我的项目中使用了hibernate和spring。

问题是我有一个父子关系,当我尝试更新父关系时,我得到了异常

原因: org.hibernate.HibernateException:不要更改对具有cascade=“all-delete- change”的集合的引用

以下是映射关系:

父级:

代码语言:javascript
复制
    <set name="kittens" fetch="join" lazy="false"
        inverse="true" cascade="all-delete-orphan">
        <key>
            <column name="ID" precision="22" scale="0"
                not-null="true" />
        </key>
        <one-to-many
            class="kitten" />
    </set>

孩子:

代码语言:javascript
复制
    <composite-id name="id" class="kittenId">
         <key-property name="kittenId" type="java.lang.Long">
            <column name="Kitten_ID" precision="22" scale="0" />
        </key-property>
       <key-many-to-one name="cat" class="cat">
            <column name="ID" precision="22" scale="0" />
        </key-many-to-one>                   
    </composite-id>

我在一个论坛上找到了,试着改成

代码语言:javascript
复制
public void setKittens(Set kittens) {
    this.kittens.clear(); 
    this.kittens.addAll(kittens); 
} 

但现在我面对的是

org.hibernate.PropertyAccessException: Kittens的setter内部发生异常

如有任何帮助,将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2013-08-26 23:53:01

我也有同样的问题。在我的例子中,问题是我错误地调用了save(Entity e),而不是update(Entinty e),并得到了这个错误。

票数 6
EN

Stack Overflow用户

发布于 2011-05-05 20:55:18

当您调用setKittens()以替换集合的内容时,以及当Hibernate调用setKittens()以初始化属性时,您应该区分这两种情况。我猜在后一种情况下,您现在得到的是NullPointerException,因为this.kittensnull。如果是这样,您可以这样做:

代码语言:javascript
复制
public void setKittens(Set kittens) {
    if (this.kittens == null) {
        this.kittens = kittens;
    } else {
        this.kittens.clear();
        this.kittens.addAll(kittens); 
    }
} 
票数 5
EN

Stack Overflow用户

发布于 2011-05-05 20:55:40

你检查过变量kitten是否被实例化了吗?也许它可以是空的,并且NullPointerException正在发生。您也可以尝试在setKittens中进行调试。

我从来没有在xml中使用过hibernate,只使用过注释。如果我说了什么愚蠢的话真的很抱歉。

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

https://stackoverflow.com/questions/5897783

复制
相关文章

相似问题

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