我正在使用 Java 上的 Hibernate 和 MySQL 数据库。如果我将
hbm2ddl.auto
设置为 create
,则所有当前表都将被删除并正确重新创建,但如果我将其设置为 update
,它不会对数据库执行任何操作,尽管向控制台报告以下行:
INFO: HHH000228: Running hbm2ddl schema update
仅供参考,我用来设置数据库的代码是:
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure()
.build();
虽然我的
cfg.xml
文件看起来像:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration 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://127.0.0.1:3306/testdatabase</property>
<property name="connection.username">xxxxxxxx</property>
<property name="connection.password">xxxxxxxx</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- Names the annotated entity class -->
<mapping class="com.test.case.Example"/>
</session-factory>
</hibernate-configuration>
显然,由于
create
正在工作,我认为没有必要显示我带注释的类。
编辑:
我期望发生的更改基本上是将数据库列类型更正为正确的类型。在运行
update
之前,我将 MySQL 中的列类型更改为与带注释的模式不同的内容,但在 update
上,Hibernate 并未按照预期更正它们。相反,当我完全删除该表时,更新确实有效。看起来 update
的功能并不像预期的那样完整?
服务注册表需要配置中的一些属性。并且因为您使用的是休眠配置文件的非标准名称/位置
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure("cfg.xml")
.build();