STS4中JPA生成Oracle11g实体类时遇SQL模型连接创建错误
我之前在STS里处理Oracle 11g的JPA实体生成时,也碰到过这种ping通但模型连接失败的情况,给你几个实用的排查和解决方法:
匹配正确的Oracle JDBC驱动版本
Oracle 11g对JDBC驱动版本有要求,别用太高版本的驱动(比如ojdbc8),建议用ojdbc6.jar(适配JDK 6/7)或者ojdbc7.jar(适配JDK 7/8),驱动和数据库、JDK版本不兼容是这类问题的常见原因。指定正确的JPA数据库方言
在STS的JPA项目配置里,一定要选对Oracle 11g对应的方言:org.hibernate.dialect.Oracle10gDialect(Hibernate没有专门为11g做方言,10g的方言完全兼容)。方言错了,工具在构建SQL模型时就会报错。确认数据库用户的权限
你的dummy用户得有足够权限读取表结构才行,比如需要拥有SELECT_CATALOG_ROLE角色,或者至少对要生成实体的目标表有SELECT权限,同时要能访问USER_TABLES、USER_COLUMNS这些系统视图——JPA工具得靠这些视图获取表的元数据。手动指定连接的Schema
有时候STS没法自动识别数据库的Schema,你可以把Schema信息加到JDBC URL里,修改后的URL如下:jdbc:oracle:thin:@localhost:1521:dummy?currentSchema=dummy这样工具就能明确要读取哪个Schema下的表了。
清理STS的缓存文件
STS的缓存偶尔会搞出奇怪的连接问题,你可以试试:- 关闭STS,找到工作区下的
.metadata/.plugins/org.eclipse.core.resources/.projects目录,删掉对应项目的缓存文件夹; - 重启STS后重新配置JPA连接,再尝试生成实体类。
- 关闭STS,找到工作区下的
检查Hibernate版本兼容性
如果你的项目用Hibernate作为JPA实现,要确保Hibernate版本和JDBC驱动、Oracle 11g兼容,比如Hibernate 5.x搭配ojdbc6/7是比较稳妥的组合。
补充:你已经设置了
sec_case_sensitive_logon=false,这个配置没问题,既然ping测试成功,说明登录的大小写问题已经解决,不用再调整这个了。
内容的提问来源于stack exchange,提问作者shreeramaute

