2010-09-12 135 views
2

我有這樣的實體類,我第一個內置測試休眠,它使用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 = new Companies("qqq","FR"); 
session.save(Companies); 
transaction.commit(); 

但每次都刪除Oracle中COMPANIES表中的所有記錄。

因此,我第一次嘗試我的數據時,它充滿了許多行,並且在其他表中使用了此主鍵,並且它能夠刪除公司中的那些行而不是其他表中的行......

因此,這意味着實際的Hibernate禁用我的所有約束,空表,並從我的測試單元中添加新的行...

我在做什麼錯?

我不想冬眠與我的數據混亂,除非我告訴它這樣做...

+1

請格式化您的代碼。 – 2010-09-12 11:47:40

回答

1

在Hibernate的配置,你需要設置hbm2dll驗證。事情是這樣的:

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

如果它被設置爲創建它會刪除並重新創建數據庫表每次運行時。

This page更詳細地描述了該設置。