NHibernate 与Oracle 点滴

    以下是我在使用NHibernate过程中遇到的一些小问题,记录下来,权当笔记吧!

1.自增序列与严格类型匹配
    在使用Oracle数据库的自增主键时,hbm.xml配置文件中generator class可设为"increment",也可设为"sequence",最好使用"increment",使用"sequence"有时在插入obj时会抛出“ORA-02289: 序列(号)不存在”异常!
    另外,在load object时,传入的ID的类型要与数据库的严格一致。比如如下自增主键:

        <id name="Id" type="Int64" >
            <column name="ID" sql-type="NUMBER" not-null="true" unique="true" index="IDPK"/>
            <generator class="sequence" />
        </id>

    当使用下列语句时,将抛出异常--"identifier type mismatch\r\n参数名: id" :

VERDUEMESSAGE nMsg = (OVERDUEMESSAGE)session.Load(typeof(OVERDUEMESSAGE),2) ;

    但是如果像下面这样,就ok了:

            long ID = 2 ;
            OVERDUEMESSAGE nMsg = (OVERDUEMESSAGE)session.Load(typeof(OVERDUEMESSAGE),ID) ;

2.如果使用Oracle数据库的自增主键,则ISession.Save()方法返回主键值。

3.Oracle自增序列创建
(1)创建序列SEQ_TEST
(2)在目标字段上创建触发器

BEGIN
SELECT XTGL.SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;
END;

4. No size set for variable length data type: String
    原因,在Oracle中,不支持插入0长度的字符串(即 ""),必须将该参数的值设置为null(如果是DataRow,则将对应的字段设为System.DBNull.Value,如 newRow[0] = System.DBNull.Value ;),问题就解决了。
5. 大小写
    在Oracle中创建表时,表名和所有的列名都将被转化为大写。在访问Oracle中的表时,SQL语句中的表名一定要用全大写,而列名的大小写则可以忽略。
 

时间: 2024-09-20 06:18:40

NHibernate 与Oracle 点滴的相关文章

使用NHibernate连接Oracle数据库运行时报错cannot open connection

问题描述 仿照别人的例子用VS2008写了个Console程序,工程名为NHOracleTest.NHibernate用的是NHibernate-2.0.1.GA版本.数据库是Oracle10g.程序编译没有问题,运行后报错:未处理的ADOException:cannotopenconnection.我怀疑是hibernate.cfg.xml文件写得有些问题,但是也是参照着NHibernate-2.0.1.GA-srcsrcNHibernate.Config.Templates中oracle数据

Oracle初学点滴-(2)-OracleOraHome90Agent

oracle|初学 症状:原来是能启动的,但是在我改了域名和机器名之后就不能启动: 解决:1.删除%oracle_home%\network\agent\*.Q2.重新启动服务即可c:\agentctl start 以上内容源自:http://blog.csdn.net/tesge/archive/2004/07/16/42958.aspx 解释:OracleOraHome90Agent服务如果不能启动,则OIA也就不能运行,OIA不能运行则无法实现在OMS登陆后的Intelligent Age

Oracle初学点滴-(1)

oracle|初学 由于项目要求,公司需要把一些项目的数据库转移成Oracle,而原来几乎都是使用SqlServer的.突然间发现,2~3年的SqlServer开发和使用经验,其实并没有给我学习Oracle带来多少优势,相反在初学Oracle的时候,还经常被缠绕在脑中的SqlServer的很多模式所困扰.Oracle是一个系统而庞大的平台,其实已经不仅仅只是一个数据库那么简单了.所以对我来说,无论是其管理还是开发,几乎都是全新的.由此,也就只能卸下SqlServer的包袱,对Oracle,慢慢来

Linux 下Oracle Client JAVA JDBC 集成点滴

首先Java下根据JDBC规范连接数据库,有几种形式,参考  http://djdnmq.iteye.com/blog/356468 oracle 驱动oci thin 区别   Oracle客户端准备 10201_client_linux32.zip 安装完成后,需要确保在终端中可以正确的执行sqlplus命令 Oracle环境变量 如果Tomcat是服务,需要把Oracle的安装环境变量写到TOMCAT中,类似如下 Tomcat加入/home/**/apache-tomcat-6.0.35/

如何杀死oracle死锁进程

方法一:Oracle的死锁非常令人头疼,总结了一些点滴经验作为学习笔记 1.查哪个过程被锁查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND LOCKS!='0'; 2. 查是哪一个SID,通过SID可知道是哪个SESSION.查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名'; 3.

ESFramework使用技巧(2) - 在插件中使用NHibernate

我们来讨论一下这种情景,你采用基于ESFramework的4层架构进行应用开发,你分析用户的需求,并将其分类整理为几大块,考虑每一块使用一个功能插件来完成.在这几个插件中,有个插件需要访问某个数据库,并且只有这个插件需要访问这个数据库,根据插件的"自治"性质,你不想将本插件中的数据访问"上升蔓延"到应用程序(FS),而是让它"仅仅"在本插件中,这样,无论是对FS还是插件都是有好处的--FS自己不需要访问数据库(日志记录除外),插件"自治

ADO.NET与ORM的比较(2) NHibernate实现CRUD

说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是 Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操 作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据. 在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外, 还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的 ORM持怀疑态度,你还可以使用来自微软的实现.根正苗红的Linq

SQL点滴14—编辑数据

原文:SQL点滴14-编辑数据 数据库中的数据编辑是我们遇到的最频繁的工作,这一个随笔中我来总结一下最常用的数据编辑. select into 经常遇到一种情况是,我们希望创建一个新表,表中的数据来源于原有的一个表:原有一个表,但是这个表中的数据已经很混乱,我们希望把这些数据备份出来,然后把原有的表中的数据清除,重新导入:在这些情况下我们可以使用select into语句. 如果当前用户拥有建表权限,在select语句使用关键字into可以在数据库中创建新的 表.这个语句只需要把into new

《Oracle性能优化与诊断案例精选》——1.3 笔耕不辍,年少曾怀作家梦

1.3 笔耕不辍,年少曾怀作家梦 在北京工作的这些年,除了做好自己的本职工作之外,我还不断学习,根据自己的实践与积累,写作.编辑.翻译出版了一系列Oracle数据库方面的技术书籍.写作的最初想法很简单,那就是把自己积累的知识与经验分享出来,并且可以和朋友们一起为社区与网络生涯留下一点记忆.就这样一路走下来到了今天,自己也在坚持之中受益匪浅. 我年轻时曾经有过一个梦想,那就是成为一个作家,现在这个梦想在技术领域得以局部实现,也算是"失之东隅,收之桑榆"吧.以下这些作品,如图1-4所示,或