在利用Hibernate的进行标准的SQL进行查询时,竟然不支持ORACLE的rowid直接查询:
session.createSQLQuery("select rowid from oracletablename").list();
查询后,程序抛出Hibernate的异常 "No Dialect mapping for JDBC type: -8",从字面上看感觉像是缺少一种数据类型的支持. 我又尝试着将查询改成如下方法:
session.createSQLQuery("select length(rowid) len from oracletablename").list();
session.createSQLQuery("select nvl2(rowid,'',rowid) orarowid from oracletablename").list();
上面两种方法均能成功查询出结果,但是这就要求在查询时必须对rowid进行处理,很是麻烦,跟踪了hibernate的源代码后,发现,Oracle驱动将rowid作为一种新的类型来对待,
columntype = -8
columnname = ROWID
但Hibernate中所有的ORACLE9iDIALECT或者其它的方言都没有注册与-8对应的列类型,所以当程序运行到
org.hibernate.dialect.TypeNames.get(-8);
时就会抛错.然后就考虑重写一下Dialect,在构造函数中将 -8这个rowid对应的列类型注册进行.
public class Oracle9iOr10gDialet extends Oracle10gDialect {
public Oracle9iOr10gDialet(){
super();
super.registerColumnType(-8, "string");////rowid对应的columnType为-8,将rowid视作一个字段值
super.registerHibernateType(-8, "string");
}
}
然后在Hibernate.cfg.xml配置文件中注册这个方言,最后重新运行,一切OK.
环境:
Hibernate3.1,JDK1.5,MacOS10.5.5
分享到:
相关推荐
- **rowid**: 是否使用数据库支持的 ROWID。 ### 总结 通过上述详细的解释,我们可以看到 Hibernate 的映射配置提供了丰富的选项来适应不同的应用场景。开发者可以根据实际需求灵活选择这些配置项,以实现高性能、...
2. **ROWNUM+子查询**:为了解决ROWNUM无法实现降序分页的问题,可以结合子查询和ORDER BY来实现。 3. **DBMS_ROWID**:Oracle 9i引入了DBMS_ROWID包,可以用来获取每行的唯一行标识,辅助进行分页。 4. **Oracle ...
- **HQL:** Hibernate使用HQL(Hibernate Query Language)来执行查询。 - **MyBatis配置:** MyBatis则依赖于XML映射文件,如`ibatorConfig.xml`来进行配置。 - **ResultMap/ResultClass:** 这两个概念分别对应于...
Oracle数据库的分页查询稍微复杂一些,因为它不支持直接的`LIMIT`关键字。我们可以使用子查询和`ROWNUM`来实现分页。例如,获取Sys_option表中第10到30条记录,可以写成: ```sql SELECT * FROM ( SELECT ROWNUM R,...
SQL Server使用`TOP`配合子查询进行分页,Oracle则有`rownum`和`rowid`这两个伪列。 - MySQL分页:`LIMIT`关键字可以实现分页,例如`LIMIT 0,10`获取前10行,`LIMIT 10,20`获取第11到20行。 - SQL Server分页:可以...
10. **Oracle的rownum与rowid**: - `rownum`是逻辑行号,按查询顺序生成。 - `rowid`是物理地址,标识表中特定的行。 11. **存储过程与函数**: - 存储过程是预编译的SQL命令集合,可以包含控制流语句。 - ...
id、rowid、rownum的区别:id通常是主键字段的名称,rowid是Oracle数据库中每行数据的唯一标识,rownum是查询结果集中行的编号。 主键和唯一索引的区别:主键用于标识表中的每一行,唯一索引则是保证列中值的唯一性...
- **Hibernate**: Hibernate是一个全功能的ORM框架,它提供了强大的映射策略和缓存机制,支持复杂的关联关系和查询功能。 - **MyBatis**: MyBatis是一个半自动化映射的框架,它允许开发者直接编写SQL语句,更加灵活...
4. **Oracle中的伪列**:伪列如ROWNUM、ROWID等,它们不是数据库表的真正列,但在查询时可以当作列使用。ROWNUM用于标识每一行,ROWID则标识数据行的物理位置。 5. **定义游标**:在Oracle中,游标(Cursor)用于...
25. **Oracle ROWNUM与ROWID**:ROWNUM用于限制查询结果数量,ROWID是行的物理地址,了解它们在查询中的应用。 26. **数据库索引**:理解B树索引、哈希索引等,知道何时使用和不使用索引。 这些知识点的深入理解和...
- **rowid**:Oracle特有的唯一标识符。 - **rownum**:按顺序为查询结果行编号。 ##### 主键和唯一索引的区别? - **主键**:用于唯一标识表中的每一行。 - **唯一索引**:可以应用于多个列,并允许空值。 ##### ...
{12.23}index, rowid}{187}{section.12.23} {12.24}sequence}{189}{section.12.24} {12.25}PL/SQL}{189}{section.12.25} {13}JDBC}{191}{chapter.13} {13.1}forName}{191}{section.13.1} {13.2}JDBC}{191}{...
- 支持SQL查询的定制。 - 简单易用,适合简单的项目。 **1.5 Linux相关命令操作** - **基本命令**:ls、cd、mv、cp等。 - **文件权限管理**:chmod、chown等。 - **进程管理**:ps、kill等。 - **网络工具**:...
26. **Oracle数据库**:理解rownum和rowid的区别,以及分页查询的方法。 27. **执行计划分析**:学习如何阅读和分析Oracle的执行计划,以提高查询效率。 28. **JVM内存管理**:探讨垃圾回收的原理和线程优先级,...
- **rowid**:Oracle内部的行标识符。 - **rownum**:返回行的顺序编号。 ##### 主键和唯一索引的区别? - **主键**:必须唯一且不能为空,通常用作标识记录的字段。 - **唯一索引**:可以为空,但每条记录在这个...