JSP学习笔记(二十五):使用Hibernate生成或还原数据库表

利用MyEclipse可以很容易的根据数据库表生成Hibernate mapping file和实体类。

 

同时反过来,利用生成的Hibernate mapping file和实体类也可以生成数据库表,这样就可以免去部署项目时建立数据库表的过程,也可以利用这种方法从一种数据库导入到另一种数据库。

 

在使用前一定要确保Hibernate在应用中可以正常访问数据库。

自动生成只适用于数据库的表,数据库没有的话,需要自已手工建立。

 

方法有两种:

1.hibernate.cfg.xml配置文件中添加属性:<property name="hbm2ddl.auto">create</property>

这种方式可以在启动web服务后首次调用Hibernate时自动建立数据库表,建立表后再把这个属性去掉,防止以后自动重新建立表,丢失数据。

 

2.以代码的形式实现:

Configuration cfg = new Configuration().configure();
SchemaExport schemaExport
= new SchemaExport(cfg);
schemaExport.create(
falsetrue);

 

我在测试不同数据库之间导入数据时出现错误,从SQLServer建立的映射无法还原到MySQL数据库,对比了一下,发现SQLServer在Hibernate mapping file里多了一个schema="dbo",把每个mapping file里的schema="dbo"去掉,就可以成功还原了。

 

使用Hibernate在多种数据库之间切换时,也会出现这种问题,解决办法就是在mapping file里不要指定schema,如果像SQLServer需要指定schema的话,可以在Hibernate配置文件hibernate.cfg.xml里指定默认schema:<property name="default_schema">dbo</property>

 

后来的一次应用,从SQLServer导入Oracle时出现两个错误:

1.ORA-01658: 无法为表空间RUIRI中的段创建 INITIAL 区

这个错误是因为表空间不足,修改表空间的大小即可。

2.ORA-00904: : 无效的标识符

这个错误是因为有些Oracle关键字被用于字段名,导致错误,比如Comment,Share,Remark,Level。解决办法比较笨,字段名中加入双引号,手工建表。

posted @ 2008-08-22 16:22  魔豆  阅读(1640)  评论(0编辑  收藏  举报