`
sxdtzhaoxinguo
  • 浏览: 215069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Hibernate3.x,hibernate3.x,Hibernate3.x整合Spring3.x不能实现自动创建表结构的解决办法:

 
阅读更多

一:今天遇到一个诡异的问题,就是关于hibernate3.x实现表结构自动创建,一般我们在用Struts2,Hibernate3.x,Spring3.x搭建框架,尤其在开发阶段都希望在启动Web容器时就可以根据Bean实体自动创建数据表结构,但是今天发现不行,经过查找,最终解决,现在记录一下:


二:首先是实体Bean类:这里我们以User.java为例:

User.java

package net.lampbrother.survey.domain;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 * 用户实体
 */
public class User {
	
	private Integer id;
	private String email;
	private String password;
	private String nickName;
	private Date regDate = new Date();
	
	private Set<Survey> surveys = new HashSet<Survey>();
	
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getNickName() {
		return nickName;
	}

	public void setNickName(String nickName) {
		this.nickName = nickName;
	}

	public Date getRegDate() {
		return regDate;
	}

	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}

	public Set<Survey> getSurveys() {
		return surveys;
	}

	public void setSurveys(Set<Survey> surveys) {
		this.surveys = surveys;
	}
	
}

三:接下来是User.hbm.xml文件:

<?xml VERSION="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class NAME="net.lampbrother.survey.domain.User" TABLE="USERS">
    
        <id NAME="id" TYPE="java.lang.Integer">
            <COLUMN NAME="USER_ID" />
            <generator class="native" />
        </id>
    
        <property NAME="email" TYPE="java.lang.String">
            <COLUMN NAME="EMAIL" />
        </property>
        
        <property NAME="password" TYPE="java.lang.String">
            <COLUMN NAME="PASSWORD" />
        </property>
        
        <property NAME="nickName" TYPE="java.lang.String">
            <COLUMN NAME="NICK_NAME" />
        </property>
        
        <property NAME="regDate" TYPE="java.util.Date">
            <COLUMN NAME="REG_DATE" />
        </property>
        
        
        
    </class>
    
</hibernate-mapping>

四:接下来就是hibernate的配置文件: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="show_sql">TRUE</property>

		<property NAME="format_sql">TRUE</property>

		<property NAME="hbm2ddl.auto">UPDATE</property>
		<!-- 上面的这个不能自动创建表结构 -->
		<!-- 根据Bean自动生成数据库表,MySql5.5以后要使用org.hibernate.dialect.MySQL5InnoDBDialect才能创建成功! -->
		<!-- <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> -->
		<property NAME="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

		<property NAME="jdbc.fetch_size">200</property>

		<property NAME="jdbc.batch_size">50</property>    
    
    	<!-- 加入 Hibernate 映射文件 -->
    	<mapping resource="net/lampbrother/survey/domain/User.hbm.xml"/>
    
    
    </SESSION-factory>

</hibernate-configuration>

五:究其原因是:MySQL5.5版本以后就不能用:org.hibernate.dialect.MySQLInnoDBDialect方言来实现自动建表了,必须改用:org.hibernate.dialect.MySQL5InnoDBDialect来实现自动建表。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics