zoukankan      html  css  js  c++  java
  • 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语句中的表名一定要用全大写,而列名的大小写则可以忽略。
     


  • 相关阅读:
    C#学习之自定义类实现foreach
    C#学习之用迭代器实现枚举器
    silverlight学习之获取照片的路径
    Java语言基础基本数据类型与运算符
    Java语言基础数组
    Asp.Net 学习资源列表
    测试第一篇BLOG文,高亮代码
    当屌丝想看《蜀山剑侠传》[python屏幕抓取]
    jQuery数据显示插件整合
    腾讯面试题:50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法【原】
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/404111.html
Copyright © 2011-2022 走看看