NHibernate 与Oracle 点滴
2006-05-19 10:57
295 查看
以下是我在使用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语句中的表名一定要用全大写,而列名的大小写则可以忽略。
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语句中的表名一定要用全大写,而列名的大小写则可以忽略。
相关文章推荐
- NHibernate 与Oracle 点滴
- C#,Castle,NHibernate,Oracle,最简单的实现
- oracle[点滴积累]
- nhibernate 连接 oracle 出现 ORA-01461 错误
- Oracle初学点滴-(1)
- Linux 下Oracle Client JAVA JDBC 集成点滴
- Oracle LogMiner 学习点滴
- oracle技术点滴--snaphost
- 编程经验点滴----在 Oracle 数据库中保存空字符串
- Oracle Native ID generation with NHibernate
- oracle 点滴
- 如果Oracle中的字段和数据库的系统字段重名,怎么配置NHibernate的映射实体文件
- C#+ASP.NET+Oracle时积累的备忘点滴
- NHibernate 使用点滴
- Oracle 点滴
- Oracle的学习点滴
- NHibernate 处理 oracle 的long数据类型
- ORACLE SQLLOADER使用点滴
- Oracle初学点滴-(1)-OracleOraHome90TNSListener
- 使用NHibernate, Oracle Clob/NClob无法插入、乱码问题