2010-09-12 21 views
2

J'ai cette classe d'entité, le premier je construit pour tester Hibernate, il utilise une séquence d'oracle pour remplir le champ ID:Mise en veille prolongée supprimer toutes les lignes avant d'insérer

@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; 
        } 

} 

Puis dans mon unité de test, je crée un objet entreprises puis enregistrez-le dans la session:

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

Mais chaque fois, il supprimer tous les enregistrements de la table Oracle entreprises.

Alors la première fois que j'ai essayé mes données, il était rempli avec beaucoup de lignes, et avec ces clés primaires utilisées dans d'autres tables, et il était capable de supprimer ces lignes dans les entreprises ...

donc cela signifie que Hibernate effectivement désactivé toutes mes contraintes, vider la table, et a ajouté la nouvelle ligne de mon unité de test ...

Qu'est-ce que je fais mal?

Je ne veux pas mise en veille prolongée au mess avec mes données à moins que je le dis de le faire ...

+1

Veuillez formater votre code. –

Répondre

1

Dans la configuration de votre mise en veille prolongée vous devez hbm2dll SET pour confirmer. Quelque chose comme ceci:

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

Si elle est définie pour créer chutera et recréer vos tables de base de données à chaque exécution.

This page décrit le réglage plus en détail.