gpt4 book ai didi

java - hibernate.hbm2ddl.auto - Create-Drop 在 Hibernate 中不工作

转载 作者:行者123 更新时间:2023-11-30 10:19:46 24 4
gpt4 key购买 nike

我正在为 hibernate 使用 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>

我发现,我不知道我是错的还是对的。当我运行我的应用程序时,hibernate 既没有删除任何表也没有创建任何表,即使在配置文件中提到了 create-drop。但是当我创建一个新对象并调用保存方法时,hibernate 删除了所有表并再次创建了所有表。所以我想到的问题可能是 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 不起作用

最佳答案

分析

(注意:这只是一个猜测。)

SessionFactory 接口(interface)的一个实例似乎没有关闭(通过 Tomcat?)。

解决方案

有必要配置 Tomcat 以适本地管理 Hibernate 的 SessionFactory。请引用:

  1. Using Hibernate with Tomcat |JBoss Developer .
  2. TomcatHibernate - Tomcat Wiki .
  3. Setup Hibernate Session Factory in Tomcat - Stack Overflow .
  4. dev - Tomcat, JPA, Hibernate and MySQL .相关要点:Integrate Hibernate 4.1 in a raw Tomcat 7 (no JPA, no Spring, etc) · GitHub .
  5. configure hibernate with embedded tomcat 7 programmatically - Stack Overflow .

关于java - hibernate.hbm2ddl.auto - Create-Drop 在 Hibernate 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com