当前位置:  开发笔记 > 编程语言 > 正文

休眠:从列表中删除项目不会保留

如何解决《休眠:从列表中删除项目不会保留》经验,为你挑选了1个好方法。

从列表中删除项目时遇到问题.该列表在超类中定义,但Hibernate注释应用于子类中的属性访问器.超类中有两种方法可以操作列表."添加"方法工作正常,但"删除"不会持续更改.我检查了我的Cascade设置,我似乎有正确的事情.我做的事情是不可能的.如果没有,我做错了吗?

这是我的课程:

@Entity 
abstract class Temporal { 
    @Id 
    @GeneratedValue 
    private Long id; 

    @Version 
    private Integer version = null; 

    @Transient 
    protected List content = new ArrayList(); 

    public void remove(T value) { 
        // business logic ... 
        content.remove(value); 
    } 

    public void add(T value) { 
        // business logic ... 
        content.add(value); 
    } 
} 

@Entity 
@AccessType("property") 
class TemporalAsset extends Temporal { 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "temporal") 
    public List getContent() { 
        return super.content; 
    } 

    protected void setContent(List list) { 
        super.content = list; 
    } 
} 

我使用TemporalAsset类的实例如下(请注意,我只使用"刷新"方法来演示行为.即使我刷新或关闭会话并打开新会话,列表也不会正确保留):

temporalAsset.add(value1); 
temporalAsset.getContent().size() == 1; // true 
session.update(temporalAsset); 

session.refresh(temporalAsset); 

temporalAsset.getContent().size() == 1; // true 

temporalAsset.remove(value1); 
temporalAsset.getContent().size() == 0; // true 
session.update(temporalAsset); 

session.refresh(temporalAsset); 

temporalAsset.getContent().size() == 0; // false, its 1 

谢谢.



1> FoxyBOA..:

您必须将Cascade显式指定为CascadeType.DELETE_ORPHAN.

尝试将代码更改为

@OneToMany    
@Cascade(cascade = {CascadeType.ALL, CascadeType.DELETE_ORPHAN}, mappedBy = "temporal")

部分来自hibernate docs:

如果子对象的生命周期受父对象的生命周期限制,则通过指定CascadeType.ALL和org.hibernate.annotations.CascadeType.DELETE_ORPHAN使父对象成为完整的生命周期对象(请参阅Hibernate参考指南了解orphan的语义)删除)


根据http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html使用@OneToOne(orphanRemoval = true)或@OneToMany(orphanRemoval = true)
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有