hbm2ddl.auto无法正常工作

时间:2014-12-02 06:15:28

标签: hibernate

我创建了一个实体类Emp,我使用hbm2ddl.auto来创建表,下面的实体相关表正在正确创建,但是在我的数据库中这个表之前还有一些表,如果我使用属性hbm2ddl.auto as创建它需要删除总模式(总表)并新创建实体相关表,不删除旧表。那些表是在那里,这个新表是创建的,我没有得到这个创建功能,任何人都可以澄清我的疑问。我使用的是版本3.6.4。

Emp.java

@Entity

@Table(name="Employe")

public class Emp {

    @Id

    int empid;

    String ename;

    public int getEmpid() {

        return empid;

    }

    public void setEmpid(int empid) {

        this.empid = empid;

    }

    public String getEname() {

        return ename;

    }

    public void setEname(String ename) {

       this.ename = ename;

    }

}

configuration.cfg.xml

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/sample</property>
<property name="connection.username">root</property>
<property name="connection.password">sun</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping class="in.hib.Emp" />

我的主要计划是

public class HibApplication {

    public static void main(String[] args) {

        Emp e=new Emp();

        e.setEmpid(2);

        e.setEname("pavai");

        Configuration cfg=new Configuration().configure();

        SessionFactory sf=cfg.buildSessionFactory();

        Session session=sf.openSession();

        session.beginTransaction();

        session.save(e);

        session.getTransaction().commit();        

    }

}

2 个答案:

答案 0 :(得分:0)

亲爱的有四个可能的值可以与hbm2ddl.auto一起使用,所有四个都在下面定义

  1. validate-它只是检查表及其列是否存在于数据库中,或者是否存在表,如果表不存在或任何列不存在而不是抛出异常。

  2. create - 如果值为create而不是hibernate,则删除该表(如果已经存在),然后创建一个新表并执行该操作,这不会实时使用,因为旧数据会从数据库中丢失。 / p>

  3. update - 如果值是更新,则hibernate使用现有表,如果表不存在,则创建新表并执行操作。这主要是经常实时使用,建议使用。

  4. create-drop - 如果值为create-drop而不是hibernate创建一个新表,并且在执行操作后删除了表,则在测试hibernate代码时使用该值。

  5. 由于 Njoy Coding

答案 1 :(得分:0)

尝试设置:

<property name="hibernate.hbm2ddl.auto">create</property> 

而不是

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