如何使用Hibernate连接到Oracle 12c PDB

时间:2018-09-11 05:24:59

标签: java hibernate hibernate.cfg.xml

我已使用here中的说明创建了一个样本Oracle 12c PDB(可插拔数据库)。如何使用Hibernate应用程序连接到此可插拔数据库?我正在使用here

中的示例Hibernate应用程序

我如下更改了hibernate.cfg.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>

    <property name="connection.url">jdbc:oracle:thin:@localhost:1521:sys</property>
    <property name="connection.username">sys as sysdba</property>
    <property name="connection.password">helloWORLD12</property>
    <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
    <property name="dialect">org.hibernate.dialect.Oracle12cDialect</property>

    <property name="show_sql">true</property>

    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <property name="current_session_context_class">thread</property>

    <mapping class="net.codejava.hibernate.Book" />

  </session-factory>
</hibernate-configuration>

但是运行程序时出现以下错误跟踪:

Exception in thread "main" org.hibernate.HibernateException: Error accessing stax stream
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:107)
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:65)
    at org.hibernate.boot.cfgxml.internal.ConfigLoader.loadConfigXmlResource(ConfigLoader.java:57)
    at org.hibernate.boot.registry.StandardServiceRegistryBuilder.configure(StandardServiceRegistryBuilder.java:163)
    at net.codejava.hibernate.BookManager.setup(BookManager.java:23)
    at net.codejava.hibernate.BookManager.main(BookManager.java:100)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[18,6]
Message: The processing instruction target matching "[xX][mM][lL]" is not allowed.
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604)
    at com.sun.xml.internal.stream.XMLEventReaderImpl.peek(XMLEventReaderImpl.java:276)
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:103)
    ... 5 more

请让我知道我要去哪里。几乎没有在线资源可以将Oracle 12c PDB与Hibernate一起使用。

更新1:配置文件中多了一行XML代码,这会导致XML解析错误。现在-如何将CDB / PDB与特定的用户帐户相关联,因为不建议通过SYS用户使用PDB。

我有一个名为“ pdb1”的PDB,它与sys用户帐户相关联。它存储在以下位置:

  

D:\ app \ myusername \ virtual \ oradata \ orcl \ pdb1

我创建了一个新用户'c ## test',然后使用以下命令登录到用户'c ## test'时创建了一个pdb:

create pluggable database pdb3 admin user pdb_admin3 identified by helloWORLD12 
file_name_convert=('D:\app\myusername\virtual\oradata\orcl\pdbseed\', 
'D:\app\myusername\virtual\oradata\test\pdb3\');

'pdb3'创建成功,但是没有与用户'c ## test'相关联。

我现在得到的错误跟踪如下:https://pastebin.com/skVMLkqT

1 个答案:

答案 0 :(得分:1)

问题在于您使用的语法。您使用的是:SID而不是/ SERVICE_NAME,因此请确保将此行更改为:

<property name="connection.url">jdbc:oracle:thin:@localhost:1521/sys</property>

要查看可用的服务,请执行lsnrctl service

  

还请注意,您正在尝试使用 sys 帐户   与 root 相同。为避免将来出现问题,最佳做法是创建一个   


根据堆栈跟踪,您错过了oracle驱动程序依赖项:

  

ClassNotFoundException:无法加载请求的类:   oracle.jdbc.OracleDriver

您应将此依赖项添加到您的pom.xml文件中,为此请执行以下步骤:

1-从Oracle站点下载ojdbc8.jar:

https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html

2-将ojdbc8安装到本地Maven存储库:

  • 指定您的路径,而不是路径/到/您的/

    mvn install:install-file -Dfile={Path/to/your/ojdbc8.jar} DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
    

3-为Pom.xml添加依赖项

<!-- ORACLE database driver -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency>