我在hibernate中遇到了一个奇怪的问题。我在我的项目中使用了hibernate和spring。
问题是我有一个父子关系,当我尝试更新父关系时,我得到了异常
原因: org.hibernate.HibernateException:不要更改对具有cascade=“all-delete- change”的集合的引用
以下是映射关系:
父级:
<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>孩子:
<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>我在一个论坛上找到了,试着改成
public void setKittens(Set kittens) {
this.kittens.clear();
this.kittens.addAll(kittens);
} 但现在我面对的是
org.hibernate.PropertyAccessException: Kittens的setter内部发生异常
如有任何帮助,将不胜感激。
发布于 2013-08-26 23:53:01
我也有同样的问题。在我的例子中,问题是我错误地调用了save(Entity e),而不是update(Entinty e),并得到了这个错误。
发布于 2011-05-05 20:55:18
当您调用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);
}
} 发布于 2011-05-05 20:55:40
你检查过变量kitten是否被实例化了吗?也许它可以是空的,并且NullPointerException正在发生。您也可以尝试在setKittens中进行调试。
我从来没有在xml中使用过hibernate,只使用过注释。如果我说了什么愚蠢的话真的很抱歉。
https://stackoverflow.com/questions/5897783
复制相似问题