Hibernate自动建表(使用DDL语句)

本文分享了使用Hibernate自动创建数据库表时遇到的问题及解决方法。作者通过回顾配置文件xxx.hbm.xml中generatorclass属性缺失导致的问题,并展示了正确的配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gd上次和大家谈到使用DDL语句实现自动建表失败的问题,过了几天再回头看果然思路就变得清晰许多,原来是xxx.hbm.xml文件的配置上出了问题,因为上次没有用Junit进行测试,所以没有看明白问题的描述,这里不得不说一句,Junit真是个好东西,emmmmmm。Junit测试后报的错误是这样的: Could not parse mapping document: org/User/hibernate.hbm.xml (RESOURCE),大概意思就是无法解析这个xxx.hbm.xml文件,对于初学者来说,我觉得应对这么大范围的错误最好的办法就是把以前用的正确的xxx.hbm.xml文件拷贝过来测试成功了再说,Gd把之前测试成功的xxx.hbm.xml文件拷贝过来,再次进行测试,果不其然,测试成功!



再回过头去找之前的错误所在,发现是粗心大意的自己把generator class那一行给落下了,真的是因小失大啊!!!

下面给出我的测试成功的文件供大家借鉴:

1.xxx.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">
<!-- Generated 2017-8-22 10:37:16 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="org.User.User" table="X_USER">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="increment" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" />
        </property>
        <property name="age" type="int">
            <column name="AGE" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="Gender" />
        </property>
    </class>
</hibernate-mapping>

这里的generator class属性值是increment,使用native也一样会测试成功。

2.xxx.cfg.xml文件

<!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>
		<property name="show_sql">true</property>
		<property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
		<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="hibernate.connection.username">system</property>
		<property name="hibernate.connection.password">123456</property>
		<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> 
		<!-- 自动建表语句,其属性值有多个,create是其中一个,属性值不同功能不同 --> 
		<property name="hibernate.hbm2ddl.auto" >create</property>  
		<mapping resource="org/User/hibernate.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

3.测试类

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import org.User.User;

public class TestX_user{
	@Test
	public void testIncrease(){
	Configuration conf = new Configuration().configure();
	SessionFactory sf = conf.buildSessionFactory();
	Session session  = sf.openSession();
	Transaction tx = session.beginTransaction();
	try {
		User u = new User();
		u.setName("张三");
		u.setAge(23);
		u.setPassword("zhangsan");
		session.save(u);
		tx.commit();
	} catch (Exception e)
	{
		// TODO: handle exception
		if(null!=tx){tx.rollback();}
		e.printStackTrace();
	}
	finally
	{
		session.close();
		sf.close();
	}
  }	    
}
如此便大功告成了,欢迎一起学习的同志们多多交流!!!



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值