在学习Hibernate的时候,按照书上的程序写好配置文件,创建了持久化类后并创建了对象-关系的映射文件。目的是运行程序的时候能够在数据库中自动创建一张表,同时对数据库进行操作。结果程序运行正常却无法自动创建表NEWS3。<class name="com.hibernate.entities.News3" table="NEWS3">
下面是我的配置文件hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置连接数据库的基本信息 -->
<property name="connection.username">root</property>
<property name="connection.password">920614</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate3</property>
<!-- 配置 hibernate 的基本信息 -->
<!-- hibernate 所使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</span></property>
<!-- 执行操作时是否在控制台打印 SQL -->
<property name="show_sql">true</property>
<!-- 是否对 SQL 进行格式化 -->
<property name="format_sql">true</property>
<!-- 指定自动生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定关联的 .hbm.xml 文件 -->
<mapping resource="com/hibernate/entities/News3.hbm.xml"/>
</session-factory>
</hibernate-configuration>
苦苦
冥思2000000....个小时后未果(浪费时间在检查代码上了,貌似每次学习新知识的时候总会有一堆配置上的问题,恼人),网上查找资料后终于知道结果。
我的数据库默认引擎是InnoDB(自己修改的默认引擎,在前面的日志中已经有记录),需要在数据库中创建一张新表。而我的配置文件中指定数据库方言是MySQLInnoDBDialect 。
当MySql默认存储引擎为InnoDB,并且在数据库中要创建一张新表的时候(即表名不存在),此时数据库方言只能选择MySQLDialect;
当MySql默认存储引擎为InnoDB,并且需更改表结构(表名存在),数据库方言三者皆可选(建议选择MySQLInnoDBDialect)。
虽然这个小问题耽误不少时间,但是在出现问题顺利 解决问题后很有成就感!关于数据库的事务操作需要多了解。