hibernate与oracle12c连接的问题

华叔3 2016-03-15 04:03:56
前提:在同一局域网中有一台服务器安装ORACLE 12C.在我的电脑中安装有oracle10g。二者建立了相同的用户以及表结构,不同点在于服务器中使用了pdborcl可拔插数据库。我在自己电脑中使用plsql可进行远程连接,且ip和主机名都可以ping通。在eclipse中使用hibernate中也可连接本地oracle10g中的数据库。采用的hibernate版本为4.3.11

问题:采用稍作修改的配置文件hibernate.cfg.xml就可以连上本地oracle10g,为何连接oracle12c始终无法连接。并且提示java.lang.NoClassDefFoundError:Could not intialize class HibernateUtils.

以下是hibernate.cfg.xml 代码,其中注释掉的是用于连接oracle10g的,可用。上面没有注释的property是用于oracle12c数据库链接的,不能连接。
<hibernate-configuration>
<session-factory>
<!-- 连接到数据库ORACLE12C:adminFB/admin_123@pdborcl -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">adminDB</property>
<property name="hibernate.connection.password">admin_123</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.0.10:1521/pdborcl</property>
<mapping resource="com/acsie/Entity/Point.hbm.xml"/>
<!-- <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> -->
<!-- <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> -->
<!-- <property name="hibernate.connection.username">adminDB</property> -->
<!-- <property name="hibernate.connection.password">admin_123</property> -->
<!-- <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521/acsie</property> -->
<!-- <mapping resource="com/acsie/Entity/Point.hbm.xml"/> -->
</session-factory>
</hibernate-configuration>

采用debug 单步调试,程序可以进入hibernateUtils,贴出hibernateUtils。但执行过static代码块后,无法进入openSession函数。
public class HibernateUtils {
private static SessionFactory sessionfactory;
private static Session session;

static{
Configuration cfg=new Configuration().configure();
StandardServiceRegistryBuilder ssrb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties());
ServiceRegistry registry= ssrb.build();
sessionfactory=cfg.buildSessionFactory(registry);
}
private HibernateUtils(){}
//获取session对象
public static Session openSession() {
return session=sessionfactory.openSession();
}

public static void closeSession(){
if(session!=null&&session.isOpen()){
session.close();
}
}
public static void closeSession(Session session){
if(session!=null&&session.isOpen()){
session.close();
}
}
}


自己感觉问题出在了xml配置上,感觉是dialect或者url 的问题。由于我的hibernate是4.3.11的,搜索后发现没有发现Oracle12cDialect文件,直接改成org.hibernate.dialect.Oracle12cDialect问题还是相同。网上说使用org.hibernate.dialect.Oracle10gDialect就可以,是真的吗?
url的问题主要集中在采用的是pdb数据库,担心这种连接的书写格式是否正确?
另附服务器中tnsname的相关配置:
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDBORCL)
)

求有经验的大家帮帮小弟,谢谢大家了。
...全文
412 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cainiaoscc 2019-11-25
  • 打赏
  • 举报
回复
可以选择使用SID方式进行数据库连接oracle12C

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧