我有一个遗留的Oracle(10.2g)数据库,我正在连接,我想使用NHibernate(2.0.1)从存储过程中返回对象.有问题的存储过程使用SYS_REFCURSOR返回结果.根据
documentation,这应该是可行的,但我在互联网上发现
few
posts,否则.
这是我的释义代码:
映射文件:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="OracleStoredProcedures" namespace="OracleStoredProcedures"> <class name="Person" mutable="false"> <id name="PersonCode" type="AnsiString" column="PERSONCODE"> <generator class="assigned" /> </id> <property name="Name" type="String" column="PERSON_NAME" /> <property name="Surname" type="String" column="PERSON_SURNAME" /> </class> <sql-query name="getpeople"> <return class="Person" /> EXEC RS_DB.GETPERSONTEST </sql-query> </hibernate-mapping>
存储过程:
CREATE OR REPLACE PROCEDURE RS_DB.GETPERSONTEST ( io_cursor IN OUT sys_refcursor ) IS BEGIN OPEN io_cursor FOR SELECT PERSONCODE,PERSON_NAME,PERSON_SURNAME FROM PEOPLE END GETPERSONTEST;
解决方法
据我记得这是我几年前在与oracle合作时发现的一个错误,我已经在NH跟踪器中追踪了这个问题并且修复了但是版本为2.1.1GA;你能证实这是同样的问题吗?
https://nhibernate.jira.com/browse/NH-847
https://nhibernate.jira.com/browse/NH-847