3

Hibernate をテストするために作成した最初のエンティティ クラスがあります。これは、オラクル シーケンスを使用して 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 が実際にすべての制約を無効にし、テーブルを空にし、テスト ユニットから新しい行を追加したことを意味します...

私は何を間違っていますか?

私がそうするように指示しない限り、休止状態が私のデータを台無しにしたくありません...

4

1 に答える 1

1

休止状態の構成では、検証するように hbm2dll を設定する必要があります。このようなもの:

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

作成するように設定されている場合、実行するたびにデータベース テーブルが削除され、再作成されます。

このページでは、設定について詳しく説明します。

于 2010-09-12T11:38:10.810 に答える