终于将mysql中的表与数据移植到了oracle中,于是修改后hbm.xml后,进行了逐个的单元测试(经验:测试查询所有session.createQuery().list()会将大部分问题暴露出来!!测试添加可以试验主键生成策略是否可行!因添加太过麻烦,一般测试几个典型即可)。发现了很多问题,特此总结!
1.Caused by: java.sql.SQLException: ORA-01747: user.table.column, table.column 或列说明无效
原因:表中的字段占用了oracle中的关键字!
处理:检查该表对应的oracle中的字段是否占用oracle的关键字,修改后,修改hbm.xml中的
<property name="level" type="integer">
<column name="level_" />
即可。
2、Caused by: java.sql.SQLException: 无法转换为内部表示
原因:oracle表中字段的类型与该表在项目中的类型不一致
处理:
1)检查你的报错信息,一般查看上图红框位置,它会告诉你大概是什么的类型错误,然后检查数据与hbm.xml和javabean是否一致。
2)因为oracle中不支持boolean类型,所以如果你的javabean中有该类型,则需要根据情况进行更改(oracle中会将boolean类型转为char类型)
3)一般情况下最后需要修改
<property name="level" type="integer">
即可!
3、Caused by: java.sql.SQLException: ORA-00904:"INFOCONNEC0_"."RECYCLESHEETNO": 标识符无效
原因:我出错的原因是我的oracle中没有这个字段,而hbm.xml和项目中的表竟然有该字段
处理:根据情况是在数据库中添加字段,或者将hbm.xml中的这几个字段注释掉...
4、Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (NASEXT.PRIMARY_97)
原因:网上的原因很多,我说一下我碰到的吧,因为是从mysql移植数据到oracle,所以oracle中存在了很多数据,当添加的时候,根据oracle序列逐步递增,但因为原始数据的占用,导致该错误...(有点牵强,但现在的现象只能让我这么理解了...)
处理:我自己修改了oracle中序列的起始点(比如已经存在100条数据,那么我的起始点就设置了101或者更高),发现就不会再报这个错误了...但是总觉的有点不对劲(难道oracle不会自我查询主键,然后找到没有被占用的数字使用么?不应该啊...)