NHibernate 與Oracle 點滴

來源:互聯網
上載者:User

    以下是我在使用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語句中的表名一定要用全大寫,而列名的大小寫則可以忽略。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.