3

我有这个实体类,我为测试 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 表中的所有记录。

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

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

我究竟做错了什么?

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

4

1 回答 1

1

在您的休眠配置中,您需要设置 hbm2dll 进行验证。像这样的东西:

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

如果将其设置为创建,它将在每次运行时删除并重新创建您的数据库表。

此页面更详细地描述了设置。

于 2010-09-12T11:38:10.810 回答