我正在使用create-drop进行hibernate,但它无法正常工作。我正在重新启动我的项目,但仍然没有放弃我的旧表及其数据。
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/HibernateConfiguration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/demo</property>
<property name="connection.username">root</property>
<property name="connection.password">****</property>
<!-- SQL dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.current_session_context_class">thread</property>
<!-- Names the annotated entity class -->
<mapping class="domains.Test"/>
<mapping class="domains.LoginDetails"/>
<mapping class="domains.User"/>
</session-factory>
</hibernate-configuration>
我发现,我不知道我是错还是错。当我运行我的应用程序时,即使配置文件中提到了create-drop,hibernate也没有删除任何表也没有创建任何表。但是当我创建一个新对象并且调用save方法时,hibernate会删除所有表并再次创建所有表。因此,在我的脑海中提出的可能是休眠的问题只是在存在sessionFactory对象时才执行操作。我使用Singleton模式来创建sessionFacotry对象。因此,在我不进行任何CRUD操作之前,将不会创建sessionFactory对象,因此它不会丢弃或重新创建所有表。如果我错了,请纠正我。
public static SessionFactory sessionFactory;
private HibernateUtility(){}
public static SessionFactory getSessionFactory() {
try{
if (sessionFactory == null) {
sessionFactory = new Configuration().configure().buildSessionFactory();
}
}catch(Exception e) {
System.out.println(e);
}
return sessionFactory;
}
直到我从DAO hibernate调用此方法时才进行任何创建或删除表操作。这就是我想说的。直到sessionFactory对象未创建,create-drop才能正常工作
答案 0 :(得分:1)
(注意:这只是猜测。)
似乎SessionFactory
接口的实例没有被关闭(由Tomcat?)。
有必要配置Tomcat以适当地管理Hibernate的SessionFactory
。请参阅: