java - 将集合设置为 'new ArrayList()' 时级联 hibernate 删除

标签 java hibernate collections cascading-deletes

我有一个使用 hibernate 映射的对象,它包含一个 id 和一个集合。在某个时间点,当对象包含其集合中的项目时,我想执行 obj.setCollection(new ArrayList()) 并让它从数据库中删除以前在集合中的项目。如果有人可以提供帮助,将不胜感激。说明问题的代码:

ORM:Foo 1-* Bar 和 Bar 1-1 Foo

class Foo {
    Long id;
    List<Bar> bars;

    //getters & setters
}

<hibernate-mapping>
    <class name="domain.Foo" table="Foos">
        <id name="id" type="long" column="id">
            <generator class="native" />
        </id>
        <list name="bars" lazy="true" cascade="all">
            <key column="FOO_ID" not-null="true" />
            <index column="SEQUENCE" />
            <one-to-many class="domain.Bar" />
        </list>     
    </class>    
</hibernate-mapping>

@Entity
@Table(name="Bars")
public class Bar {
    private Long id;
    private Foo foo;
    private String name;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="ID")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @ManyToOne
    @JoinColumn(name="FOO_ID", insertable=false, updatable=false)
    public Foo getFoo() {
        return foo;
    }

    public void setFoo(Foo foo) {
        this.foo = foo;
    }

    @Column(name="NAME")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

最佳答案

您可能想要做的是:

obj.getCollection().clear();

关于java - 将集合设置为 'new ArrayList()' 时级联 hibernate 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4780567/

相关文章:

java - java中将一个数组列表映射到另一个数组列表

asp.net-mvc - ASP.NET MVC。将 ViewModel 绑定(bind)到集合中的项目

java - 使用简单 XML 序列化 TimeUnit

java - 在单个 JFrame 中使用多个 JPanel

java - 如何使该语句返回正确数量的实体

java - Java 的侵入式列表实现?

java - SC Java 程序员 6 考试

java - 在 map 上移动时如何更改谷歌地图标记大小

java - UniqueConstraint hibernate 和什么是目录

java - hibernate有哪些要点?