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语句中的表名一定要用全大写,而列名的大小写则可以忽略。
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值