欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

NHibernate 与Oracle 点滴

发布时间:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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语句中的表名一定要用全大写,而列名的大小写则可以忽略。
 


与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是生活随笔为你收集整理的NHibernate 与Oracle 点滴的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。