Как подключиться к Oracle 12c PDB с помощью Hibernate - PullRequest
0 голосов
/ 11 сентября 2018

Я создал образец Oracle 12c PDB (сменная база данных), используя инструкции из здесь . Как подключиться к этой подключаемой базе данных с помощью приложения Hibernate? Я использую пример приложения 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 с определенной учетной записью пользователя, поскольку использование PDB через пользователя SYS не рекомендуется.

У меня есть PDB с именем 'pdb1', и он связан с учетной записью пользователя sys. Он хранится в следующем месте:

D: \ приложение \ MyUserName \ виртуальный \ oradata \ ORCL \ pdb1

Я создал нового пользователя 'c ## test', а затем создал pdb, во время входа в систему пользователя 'c ## test', используя следующую команду:

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 голосов
/ 11 сентября 2018

Проблема связана с синтаксисом, который вы используете.вы используете: 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- Загрузитьojdbc8.jar с сайта oracle:

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>
...