Hibernate中的异常(不要使用cascade ="all-delete-orphan"更改对集合的引用)

0 spring hibernate

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

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

引起:org.hibernate.HibernateException:不要使用cascade ="all-delete-orphan"更改对集合的引用

以下是映射:

家长:

    <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>
Run Code Online (Sandbox Code Playgroud)

孩子:

    <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>
Run Code Online (Sandbox Code Playgroud)

我在一个论坛中找到并试图改变

public void setKittens(Set kittens) {
    this.kittens.clear(); 
    this.kittens.addAll(kittens); 
} 
Run Code Online (Sandbox Code Playgroud)

但现在我正面临着

org.hibernate.PropertyAccessException:在小猫的setter中发生异常

任何帮助将不胜感激.

axt*_*avt 5

您应该区分setKittens()为了替换集合的内容而调用的情况,以及Hibernate setKittens()为了初始化属性而调用的情况.我猜你现在正NullPointerException处于后一种情况,因为this.kittensnull.如果是这样,你可以这样做:

public void setKittens(Set kittens) {
    if (this.kittens == null) {
        this.kittens = kittens;
    } else {
        this.kittens.clear();
        this.kittens.addAll(kittens); 
    }
} 
Run Code Online (Sandbox Code Playgroud)


Bet*_*sta 5

我有同样的问题。就我而言,问题是,我错误地而不是update(Entinty e)打电话给我save(Entity e)并得到了这个错误。