【问题标题】:Hibernate deleting all rows before inserting在插入之前休眠删除所有行
【发布时间】:2011-04-11 07:31:42
【问题描述】:

我有这个实体类,我构建的第一个用于测试 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 弄乱我的数据,除非我告诉它这样做......

【问题讨论】:

  • 请格式化您的代码。

标签: oracle hibernate delete-row


【解决方案1】:

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

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

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

This page 更详细地描述了设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多