hibernate与oracle数据库
❶ 如何使用Nhibernate动态连接Oracle数据库
使用配置文件nfig)连接数据库
下面以使用Nhibernate2.2连接Oracle10数据库为例,给出连接配置信息如下:
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="nnection_string">User ID=hzga;Password=hzga;Data Source=orcl;Persist Security Info=True;</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
</session-factory>
</hibernate-configuration>
❷ hibernate如何配置oracle数据库中表之间的对应关系
hibernate.cfg.xml中除了数据库配置信息外,像这样
<mapping resource="com/bean/XXX.hbm.xml" />
<mapping resource="com/bean/XXX.hbm.xml" />配置,让hibernate知道去哪儿找那两个表。然后在XXX.hbm.xml中配置<one-to-one name="xxx" class="com.bean.XXX" cascade="all" property-ref="xxx"></one-to-one>这样的就额可以了。。。
❸ 如何配置Hibernate连接oracle12c 的PDB和CDB数据库
1 连接到CDB
和普通实例一样的连接。 指定ORACLE_SID 以后可以使用OS认证,也可以使用密码进行连接。
[oracle@Ora12c /]$ echo $ORACLE_SID
cndba
[oracle@Ora12c /]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Proction onMon Apr 28 11:33:43 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 - 64bit Proction
With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options
SQL> conn system/oracle
Connected.
SQL>
--查看CDB中可用的service:
SQL> COLUMN name FORMAT A30
SQL> SELECT name,pdb
2 FROM v$services
3 ORDER BY name;
NAME PDB
------------------------------------------------------------
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
cndba CDB$ROOT
cndbaXDB CDB$ROOT
pcndba2 PCNDBA2
pdbcndba PDBCNDBA
6 rows selected.
--通过lsnrctl 也可以判断:
[oracle@Ora12c /]$ lsnrctl service
LSNRCTL for Linux: Version 12.1.0.1.0 -Proction on 28-APR-2014 11:35:31
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
Services Summary...
Service "cndba" has 1instance(s).
Instance "cndba", status READY, has 1 handler(s) for thisservice...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "cndbaXDB" has 1instance(s).
Instance "cndba", status READY, has 1 handler(s) for thisservice...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: Ora12c, pid: 10085>
(ADDRESS=(PROTOCOL=tcp)(HOST=Ora12c)(PORT=14696))
Service "pcndba2" has 1instance(s).
Instance "cndba", status READY, has 1 handler(s) for thisservice...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "pdbcndba" has 1instance(s).
Instance "cndba", status READY, has 1 handler(s) for thisservice...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
The command completed successfully
[oracle@Ora12c /]$
通过这些service,就可以远程连接CDB。
--EZCONNECT
C:\Users\Dave>sqlplussystem/[email protected]:1521/cndba
SQL*Plus: Release 11.2.0.1.0 Proction on 星期三 4月 30 11:36:48 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 - 64bit Proction
With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options
SQL>
--通过TNSNAMES.ORA连接:
在tnsnames.ora 中配置如下:
cndba =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cndba)
)
)
--连接:
C:\Users\Dave>sqlplussystem/oracle@cndba
SQL*Plus: Release 11.2.0.1.0 Proction on 星期三 4月 30 11:40:01 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 - 64bit Proction
With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options
SQL>
2 在不同Container database中切换
在12c的架构中,因为有CDB和 PDB的存在,所以会有很多不同的container,所以在连接到不同的container时,就需要进行切换。
--查看当前的container:
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> SELECT SYS_CONTEXT('USERENV','CON_NAME') FROM al;
SYS_CONTEXT('USERENV','CON_NAME')
--------------------------------------------------------------------------------
CDB$ROOT
SQL> set lin 140
SQL> select con_id, dbid,guid, name , open_mode from v$pdbs;
CON_ID DBID GUID NAME OPEN_MODE
---------- ------------------------------------------ ---------- ----------
2 4088301206 PDB$SEED READ ONLY
3 PDBCNDBA READ WRITE
4 1231796139 PCNDBA2 READ WRITE
--切换container:
SQL> alter session setcontainer=pcndba2;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PCNDBA2
3 连接到PDB
--EZCONNECT:
C:\Users\Dave>sqlplussystem/[email protected]:1521/pcndba2
SQL*Plus: Release 11.2.0.1.0 Proction on 星期三 4月 30 11:54:30 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 - 64bit Proction
With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options
SQL>
--TNSNAMES.ora
在tnsnames.ora 中添加如下内容:
pcndba =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pcndba2)
)
)
C:\Users\Dave>sqlplussystem/oracle@pcndba
SQL*Plus: Release 11.2.0.1.0 Proction on 星期三 4月 30 11:55:50 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 - 64bit Proction
With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options
SQL>
❹ hibernate连接Oracle数据库出现问题
可能性1:没有导入Oracle驱动jar包,classpath里加入
可能性2:Hibernate-config文件配置数据库驱动有问题
❺ hibernate配置oracle数据库该怎么写
1
既然你要链接oracle数据库 ,那么首先就是先打开我们的oracle数据库了(登陆oracle后用scoot用户登录)
2
第二步,就是打开我们的MyEclipse开发工具
3
在MyEclipse中新建一个web项目
4
在我们MyEclipse右上角中选择MyEclopse Database Explorer随后在我们的Database Explorer中的空白处右击新建
5
在弹出的窗体中按照图中提示选择(这一步注意的是Add JARS 必须要选择的是oracle数据环境下的ojdbc6.jar包)
6
点击下一步之后按照图中选项选择
7
选择scoot用户后点击下一步
8
最后点击结束!完成
9
双击我们的scoot可以看到我们的表空间
10
返回到我们的MyEclipse界面,在web项目上右击→MyEclipse→add hibernate Annotations弹出如下框,随后按照图中选项选择
11
选择我们的src文件夹
12
数据连接选择scoot用户(如下图)
13
创建一个新的包
14
完成我们的配置文件
15
在我们的MyEclopse Database Explore中的scoot表空间的选择一个表然后右击选择hibernate Reverse Engineering
16
新建一个包为bboy2
17
将我们的 Id Generator 选为 increment
18
弹出的提示框选择NO
19
这样我们的MyEclipse部署hibernate配置文件和链接数据库就完成了
❻ hibernate连接oracle数据库时,用increment是什么 意思在一个项目看见这种写法,不明白什么意思。
increment是hibernate中主键的生成策略的一种方式。它由Hibernate从数据库中取出主键的最大值(每个session只取1次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库。虽然支持跨数据库,但它不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。
❼ hibernate怎么连接oracle数据库连接
1
先来创建一个实体类:
2
接着看一下hibernate的简单配置和映射
3
这一步重要,我们要创建sessionfactory了
4
开始测试,写个main方法,看图
5
运行一下,我们look一下结果
6
与数据库表对比一下,ok
❽ 如何使用Nhibernate动态连接Oracle数据库
一、使用配置文件nfig)连接数据库
下面以使用Nhibernate2.2连接Oracle10数据库为例,给出连接配置信息如下:
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="nnection_string">User ID=hzga;Password=hzga;Data Source=orcl;Persist Security Info=True;</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
</session-factory>
</hibernate-configuration>
二、通过提供一个IDictionary实例连接数据库
下面还是以使用Nhibernate2.2连接Oracle10数据库为例,给出连接配置信息如下:
cfg = new Configuration();
IDictionary<string, string> connProps = new Dictionary<string, string>();
connProps.Add("connection.driver_class", "NHibernate.Driver.OracleClientDriver");
connProps.Add("nnection_string", "User ID=hzga;Password=hzga;Data Source=orcl;Persist Security Info=True;");
connProps.Add("query.substitutions", "true 1, false 0, yes 'Y', no 'N'");
connProps.Add("dialect", "NHibernate.Dialect.Oracle10gDialect");
connProps.Add("proxyfactory.factory_class", "NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu");
cfg.SetProperties(connProps);
cfg.AddAssembly(AssemblyName);
sessions = cfg.BuildSessionFactory();
三、如何使用Nhibernate动态直接连接Oracle数据库
上述两种方式都可以成功连接到Oracle数据库,但是前提条件是运行程序时需要安装Oracle客户端。在程序发布部署的时候安装Oracle客户端是一件非常麻烦的事件,那么有没有一种比较好的方法可以直接连接Oracle数据库,同时又不必安装Oracle客户端呢。
答案是肯定的,下面提供两种方式直接连接Oracle数据库:
1、通过OleDB和Oracle公司的驱动
cfg = new Configuration();
IDictionary<string, string> connProps = new Dictionary<string, string>();
connProps.Add("connection.driver_class", "NHibernate.Driver.OleDbDriver");
connProps.Add("nnection_string", "Provider=OraOLEDB.Oracle.1;User ID=hzga;Password=hzga;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.148)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))");
connProps.Add("query.substitutions", "true 1, false 0, yes 'Y', no 'N'");
connProps.Add("dialect", "NHibernate.Dialect.Oracle10gDialect");
connProps.Add("proxyfactory.factory_class", "NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu");
cfg.SetProperties(connProps);
cfg.AddAssembly(AssemblyName);
sessions = cfg.BuildSessionFactory();
2、通过OLEDB和微软公司的Oracle驱动
cfg = new Configuration();
IDictionary<string, string> connProps = new Dictionary<string, string>();
connProps.Add("connection.driver_class", "NHibernate.Driver.OleDbDriver");
connProps.Add("nnection_string", " Provider=MSDAORA.1;User ID=lportal;Password=lportal;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = zhbrserver)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))");
connProps.Add("query.substitutions", "true 1, false 0, yes 'Y', no 'N'");
connProps.Add("dialect", "NHibernate.Dialect.Oracle10gDialect");
connProps.Add("proxyfactory.factory_class", "NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu");
cfg.SetProperties(connProps);
cfg.AddAssembly(AssemblyName);
sessions = cfg.BuildSessionFactory();
❾ hibernate连接oracle 插入数据库是问号怎么解决
hibernate连接oracle 插入数据库是问号的解决办法:
在我的电脑上右键属性--高级系统设置--高级--环境变量,新建用户变量:
变量名:
变量值:
LANG=zh_CN.GBK
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK