Hibernate中Javabean不能自动生成MySQL表结构问题

来源:互联网 发布:山寨币交易平台源码 编辑:程序博客网 时间:2024/05/14 23:26

Hibernate中,在用Javabean自动生成MySQL的时候,在已经手动创建数据库的情况下,总是表结构生成失败,关键是还不报错,苦恼了半天,于是开始在寻找解决的方法。首先贴上我的代码。

Javabean

package com.itheima.domain;public class User {private Integer id;private String name;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

映射文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">    <hibernate-mapping><class name="com.itheima.domain.User" table="t_user"><id name="id" column="id"><generator class="native"/></id><property name="name" column="name" length="30"/><property name="age" column="age"/></class></hibernate-mapping>

核心配置文件

<?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标签 --><session-factory><!-- 必须配置的参数。共有5个,4大参数和1个数据库方言 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">1234</property><!-- 配置数据库的方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可选配置的参数 --><!-- 在控制台显示SQL语句 --><property name="hibernate.show_sql">true</property><!-- 把在控制台显示的SQL语句格式化输出 --><property name="hibernate.format_sql">true</property><!-- 生成数据库的表结构create 穿件Javabean对应的表结构,删除原表,一般实际开发中不会使用update 开发常用的值。如果没有表结构,创建表结构,存在表结构就不创建,会直接添加数据,如在Javabean里添加info的例子 --><property name="hibernate.hbm2dd1.auto">update</property><!-- 映射配置文件。引入映射的配置文件 --><mapping resource="com/itheima/domain/Customer.hbm.xml"/></session-factory></hibernate-configuration>以上是代码部分,测试类就不放了。

首先在网上找了几个可能的问题。
第一,<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>里边的问题,说是数据库引擎方言之类的问题,需要把代码改成<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>,我看了一下,自己原来写的就是这样的,所以问题没有出在这里。
第二,hibernate的版本兼容问题,猜测着不是,我用的是5,应该能兼容之前的例题版本。
第三,说是没有开启自动创建表,或者创建表时赋值错误,也就是下边这行代码
<property name="hibernate.hbm2dd1.auto">update</property>,网上争议的地方时里边应该用update还是什么。我在这里是需要创建一个表结构,可以选用update或者是create,考虑到表后期的使用,肯定是使用update,所以问题不是出在update的值这里。
最后细心观察了一下自己的代码,终于还是找到了错误,比较狗血,错误还是出在这行代码,但是从文档里复制代码的时候复制错了,这样原来的属性是x行这样的
<property name="hibernate.hbm2dd1.auto">update</property>//x
正确的代码应该是y行这样的
<property name="hibernate.hbm2ddl.auto">update</property>//y

没有差别是不是?但是在eclipse里是有差别的。在eclipse里,x行代码中hbm2dd1的1显示是数字1,而正确的应该是y行,hbm2ddl中的l应该是小写的字母L。复制文档的时候就是把1而不是小写的L复制过来了,这才导致了不报错,但是还是不能成功创建表结构的后果。


1 0