Hibernate在插入之前删除所有行

时间:2010-09-12 11:23:24

标签: oracle hibernate delete-row

我有这个实体类,我为测试Hibernate而构建的第一个实体类,它使用oracle序列来填充ID字段:

@Entity
@Table(name="COMPANIES")
public class Companies {

                private Integer cmpid;
                private String cmpname;
                private String cmpcountry;

                public Companies() {

                }

                public Companies(String name, String country) {
                    this.cmpname = name;
                    this.cmpcountry = country;
                }
                    @Id
                    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "gen_CMP")
                    @SequenceGenerator(name="gen_CMP", sequenceName = "CMP_ID_SEQ")
                    @Column(name="CMP_ID", nullable=false)
                    public Integer getCmpId() {
                    return this.cmpid;
                    }

                    public void setCmpId(Integer cmpid) {
                    this.cmpid = cmpid;
                    }

                    @Column(name="CMP_NAME", nullable=true)
                    public String getCmpName() {
                    return this.cmpname;
                    }

                    public void setCmpName(String cmpname) {
                    this.cmpname = cmpname;
                    }

                    @Column(name="CMP_COUNTRY", nullable=true)
                    public String getCmpCountry() {
                    return this.cmpcountry;
                    }

                    public void setCmpCountry(String cmpcountry) {
                    this.cmpcountry = cmpcountry;
                    }

}

然后在我的测试单元中,我创建一个Companies对象,然后将其保存在会话中:

Companies Companies = new Companies("qqq","FR");
session.save(Companies);
transaction.commit();

但每次都会删除Oracle中COMPANIES表中的所有记录。

所以我第一次尝试我的数据时,它充满了许多行,并且在其他表中使用了这些主键,并且它能够删除公司中的那些行而不是其他表...

所以这意味着Hibernate实际上禁用了我的所有约束,清空了表,并从我的测试单元添加了新行......

我做错了什么?

我不希望hibernate弄乱我的数据,除非我告诉它这样做......

1 个答案:

答案 0 :(得分:1)

在你的休眠配置中,你需要设置hbm2dll来验证。像这样:

 <property name="hbm2ddl.auto">validate</property>

如果设置为create,则每次运行时都会丢弃并重新创建数据库表。

This page更详细地介绍了该设置。