【发布时间】:2018-07-06 19:14:27
【问题描述】:
我正在使用 create-drop 进行休眠,但它不起作用。我正在重新启动我的项目,但它仍然没有删除我的旧表及其数据。
<property name="hibernate.hbm2ddl.auto">create-drop</property>
hibernate.cfg.xml
<?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,我的应用程序休眠也没有删除任何表,也没有创建任何表。但是当我创建一个新对象并调用保存方法时,休眠删除了所有表并再次创建了所有表。所以我想到的可能是休眠的问题只是在有 sessionFactory 对象存在时才执行操作。我正在使用 Singleton 模式来创建 sessionFactry 对象。因此,在我不执行任何 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 不起作用
【问题讨论】:
-
@SergeyBrunov 抱歉,我没明白你想说什么。
-
你能看看answer吗?你怎么看?
-
@SergeyBrunov 我已经检查了那个答案,并且我已经正确关闭了 sessionFactory。但是如果我错了,我脑海中又出现了一个问题,请纠正我。当 sessionFactory 正确创建时,Hibernate 将创建删除表,当我停止 tomcat 时,它将自动销毁 sessionFactory 对象。对吗?
-
@SergeyBrunov 这里发生了什么,当我启动服务器或运行我的应用程序时,它并没有创建或删除表。但是当我创建需要 sessionFactory 对象的新用户时,休眠删除并创建了所有表。我使用单例设计模式来创建 sessionFactory 对象。因此,在我执行任何 Db 操作之前,它不会创建 sessionFactory 对象,这可能是仅在运行应用程序时未删除或创建表的原因。因为只是运行应用程序不会创建 sessionFactory 对象。
标签: java hibernate hibernate-mapping