Как подключиться к 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>