Как подключиться к Oracle 12c PDB с помощью Hibernate

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

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

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

2- Установите ojdbc8 в ваш локальный репозиторий maven:

  • укажите ваш путь вместо Path / to / your /

    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>
Другие вопросы по тегам