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