我已使用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
答案 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
文件中,为此请执行以下步骤:
https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html
指定您的路径,而不是路径/到/您的/
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>