问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate如何使用注解调用存储过程接受return回来的值 例如oracle数据库中有个存储过程叫 pro_Test()

发布网友 发布时间:2022-04-09 00:35

我来回答

2个回答

懂视网 时间:2022-04-09 04:56



  NHibernate2.1.1版终于可以调用Oracle的存储过程了,不过必须使用NHibernate.Driver.OracleDataClientDriver驱动(Oracle.DataAccess.dll),但这会导致hbm2ddl.keywords抛异常,所以也不是很完美。

NHibernate调用Oracle的存储过程的方法

  首先,在Oracle10g里面创建一个简单的存储过程,它的第一个参数必须是SYS_REFCURSOR类型的。
技术分享存储过程

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->技术分享create or replace procedure spCustomer_get_by_name(cur_OUT out SYS_REFCURSOR, customer_name VARCHAR2) is
技术分享begin
技术分享  open cur_OUT for
技术分享  select *
技术分享    FROM Customer c
技术分享   WHERE c.firstname LIKE ‘%‘||customer_name;
技术分享end spCustomer_get_by_name;   Customer表结构如下。
技术分享Customer表结构

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->技术分享create table CUSTOMER
技术分享(
技术分享  CUSTOMERID     VARCHAR2(36) not null,
技术分享  VERSION        VARCHAR2(200),
技术分享  FIRSTNAME      VARCHAR2(200),
技术分享  LASTNAME       VARCHAR2(200),
技术分享  ISDELETE       NUMBER(1),
技术分享  CREATETIME     DATE,
技术分享  ESTABLISH_DATE DATE,
技术分享  AGE            NUMBER(10),
技术分享  INCOME         NUMBER(19,4),
技术分享  CUSTOMER_TYPE  NUMBER(10)
技术分享)   在Customer.hbm.xml里面,增加调用存储过程的配置。

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->技术分享<sql-query name="SelectCustomerByName">
技术分享    <return alias="cus" class="Dawn.HIS.Infrastructure.Core.Li.Customer">
技术分享    </return>
技术分享    { call spCustomer_get_by_name(:customer_name) }
技术分享</sql-query>   调用存储过程的C#代码为:

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->技术分享ISession session = 
技术分享IQuery q = session.GetNamedQuery("SelectCustomerByName");
技术分享q.SetString("customer_name", "景");
技术分享IList<Customer> cList = q.List<Customer>();
  现在已经可以运行下试试了,不过很可能会抛出“OracleClientDriver does not support CallableStatement syntax (stored procedures). Consider using OracleDataClientDriver instead.”这个异常,如果你和我一样用的是“NHibernate.Driver.OracleClientDriver”的话。解决方法是,在hibernate.cfg.xml文件里把“<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>”改成“<property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>”,然后把“Oracle.DataAccess.dll”(在Oracle客户端的安装目录下可以找到它)复制到网站的bin目录下。
  再次运行程序,会抛出“无法将类型为“Oracle.DataAccess.Client.OracleConnection”的对象强制转换为类型“System.Data.Common.DbConnection”。 ”异常。引发这个异常的是“NHibernateToolhbm2ddlSuppliedConnectionProviderConnectionHelper.cs”。第25行:“connection = (DbConnection)provider.GetConnection();”。有一个方法可以绕过这行代码的执行,就是在hibernate.cfg.xml里增加一行“<property name="hbm2ddl.keywords">none</property>”。但其实“hbm2ddl.keywords”是一个挺不错的功能(有兴趣可以Google下这个关键字),不能用它挺遗憾的,而且也不知道除了这个之外是否还有其它功能会受到影响,心里毛毛的。
  除了上面的演示,还可以调用Oracle的Function获取数据,也可以调用存储过程进行增、删、改操作,请参考“NHibernate-2.1.1.GA-srcsrcNHibernate.TestSqlTestCustomOracle”目录下的源代码。

技术分享

用NHibernate调用Oracle的存储过程

标签:

热心网友 时间:2022-04-09 02:04

hibernate的映射关系记不太清了,但是针对sql而言,其实很容易的,例如你这个pro_Test()返回值是100的话,可以写个查询语句调用:
select pro_Test() value from al;
此时的结果:
value
-------
100
相信有了这样的结果,你的java代码就好写了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
白色T 恤如何搭配才能穿出优雅的韵味? 白色T 恤衫怎样搭配才能显得时髦又好看? 白色紧身正肩T 恤想要穿出休闲感,该如何搭配? 手机怎么连接笔记本电脑的wifi上网 电热水器为什么用着用着就没压力了 用什么拖地最干净又耐脏 爱奇艺会员的等级是怎么划分的? 爱奇艺星钻会员怎么开通 怎样才是正确的接吻呢 网页上鼠标点住右键拖动后出的蓝色线条是什么?干什么用的?为什么一松开... 爷爷爸爸和妈妈准备乘火车去旅游往返的票价相同都是119元他们买往返火 赵亮和爸爸、妈妈去旅游,往返都乘火车,每张车票168元,这次旅游买火车票一共花了多少钱 和妈妈一起旅行是种怎样的体验 小文和妈妈去旅游买两张火车票一共用去150元小文的火车票票价是妈妈的一半小文的火车票票价是多少元 寒假我和爸爸妈妈一起坐火车去深圳游泳,用英语,怎么写? 我和爸爸妈妈一起去旅游,乘火车每张票为324元,返回时的票价相同.请你算一算,我们这次旅游,坐火车200 说说你对下列的事情看法暑假小军和跟着爸爸妈妈一起坐火车去旅游游应该要买半 妈妈,火车,旅游 暑假,小红和妈妈乘动车去旅行它可以在图选出 暑假李明和妈妈做乘坐火车出去旅游当经过一座大桥时她发现路牌上写着... 玉米火腿寿司的家常做法 古惑仔有多少集? 古惑仔共有几集啊,血腥不呢,有美女没啊 空调吹风温度不一样,这是为什么? 安晚俩个字分开发是什么意思 安晚堂前什么意思,有什么含义 男生对女生说安晚 安晚贴是什么意思?安晚是什么意思? 晚安安啥意思 刚刚给个男生发晚安,之后会的我安晚,啥意思,总觉得不对,在线等,急!!! cad2009怎么画直线 往年劳动节调不调休 五一可以结婚吗新野 在CAD2009中怎样画直线 五一预计2.65亿人次出行,这个数字与往年相比怎么样? 上海外滩客流瞬时6.1万,单日客流人次多少? 五一旅游预计人次2.65亿,为何出游人数相比往年大幅增长? “出城大片”上演!多地高速拥堵,其中哪些高速路段堵的最厉害? ...端午节 中秋节 国庆节 具体哪几天放假?按照往年规律预测一下_百度... 历年五一假期黄金的价格是上涨还是下降 五一上海酒店订单暴涨十几倍,你五一选择去哪里游玩? 郑大体院往年五一放几天假 国定假日有哪些? 为什么男人没有胡子好看,为啥又长胡子? 男人是留胡子好还是不留胡子好? 你们觉得男生有胡子好还是没胡子好?16岁,长胡子了能刮吗? 男人留胡子好还是不留胡子好? 男人有胡子好还是没有胡子好,说出原因 男人有胡子跟没胡子的差别,你更喜欢哪一款 男人的味道就靠它了!有胡子VS没胡子,男人该如何选择?