JSP学习笔记(二十五):使用Hibernate生成或还原数据库表
利用MyEclipse可以很容易的根据数据库表生成Hibernate mapping file和实体类。
同时反过来,利用生成的Hibernate mapping file和实体类也可以生成数据库表,这样就可以免去部署项目时建立数据库表的过程,也可以利用这种方法从一种数据库导入到另一种数据库。
在使用前一定要确保Hibernate在应用中可以正常访问数据库。
自动生成只适用于数据库的表,数据库没有的话,需要自已手工建立。
方法有两种:
1.hibernate.cfg.xml配置文件中添加属性:<property name="hbm2ddl.auto">create</property>
这种方式可以在启动web服务后首次调用Hibernate时自动建立数据库表,建立表后再把这个属性去掉,防止以后自动重新建立表,丢失数据。
2.以代码的形式实现:
SchemaExport schemaExport= new SchemaExport(cfg);
schemaExport.create(false, true);
我在测试不同数据库之间导入数据时出现错误,从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。解决办法比较笨,字段名中加入双引号,手工建表。