我创建了一个实体类Emp,我使用hbm2ddl.auto来创建表,下面的实体相关表正在正确创建,但是在我的数据库中这个表之前还有一些表,如果我使用属性hbm2ddl.auto as创建它需要删除总模式(总表)并新创建实体相关表,不删除旧表。那些表是在那里,这个新表是创建的,我没有得到这个创建功能,任何人都可以澄清我的疑问。我使用的是版本3.6.4。
@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;
}
}
<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();
}
}
答案 0 :(得分:0)
亲爱的有四个可能的值可以与hbm2ddl.auto一起使用,所有四个都在下面定义
validate-它只是检查表及其列是否存在于数据库中,或者是否存在表,如果表不存在或任何列不存在而不是抛出异常。
create - 如果值为create而不是hibernate,则删除该表(如果已经存在),然后创建一个新表并执行该操作,这不会实时使用,因为旧数据会从数据库中丢失。 / p>
update - 如果值是更新,则hibernate使用现有表,如果表不存在,则创建新表并执行操作。这主要是经常实时使用,建议使用。
create-drop - 如果值为create-drop而不是hibernate创建一个新表,并且在执行操作后删除了表,则在测试hibernate代码时使用该值。
由于 Njoy Coding
答案 1 :(得分:0)
尝试设置:
<property name="hibernate.hbm2ddl.auto">create</property>
而不是
<property name="hbm2ddl.auto">create</property>