我在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中发生异常
任何帮助将不胜感激.
您应该区分setKittens()为了替换集合的内容而调用的情况,以及Hibernate setKittens()为了初始化属性而调用的情况.我猜你现在正NullPointerException处于后一种情况,因为this.kittens是null.如果是这样,你可以这样做:
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)
| 归档时间: |
|
| 查看次数: |
13769 次 |
| 最近记录: |