NHibernate 与Oracle 点滴
??? 以下是我在使用NHibernate過程中遇到的一些小問題,記錄下來,權當筆記吧!
1.自增序列與嚴格類型匹配
??? 在使用Oracle數據庫的自增主鍵時,hbm.xml配置文件中generator class可設為"increment",也可設為"sequence",最好使用"increment",使用"sequence"有時在插入obj時會拋出“ORA-02289: 序列(號)不存在”異常!
??? 另外,在load object時,傳入的ID的類型要與數據庫的嚴格一致。比如如下自增主鍵:
????????????<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)在目標字段上創建觸發器
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語句中的表名一定要用全大寫,而列名的大小寫則可以忽略。
?
總結
以上是生活随笔為你收集整理的NHibernate 与Oracle 点滴的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给25岁男人的忠告:有种责任感.
- 下一篇: 心灵测试绝对经典