web服务器:oc4j,数据库:oracle 10g
spring+hibernate架构+orabpel
部署应用,发现如下错误:
Operation failed with error: Error creating bean with name 'initMenuItemData' defined in ServletContext resource [/WEB-INF/classes/applicationContext-initTestDatas.xml]: Invocation of init method failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
打开hibernate显示sql的开关,经排查,发现是有些表已存在,不能被再次创建,在系统初始化插入数据时出错.
但该数据库是新创建的,何来之表!?
oc4j的文档有专门针对hibernate的一个解决办法:替换toplink下的antlr包,但部署前已替换.
将数据库改成sql server,一切正常,因此问题肯定是出在oracle数据库,或者应用中与数据库配置相关的地方.
查看了下hibernate.properties文件,发现配的用户是dba级别的,可以访问多个scheme.
正好有一个不同版本的该应用引用了另一个scheme,于是乎导致部署该应用时发现了另一个scheme的表,于是乎就出现了上面的错误.
问题查出后,修改了该配置文件,把用户改成该scheme专有的之后,问题解决.