`
zhouyi8510
  • 浏览: 1814 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Hibernate 针对 Oracle 特有函数及自定义函数的实现办法

阅读更多


Hibernate 能支持数据库特有的函数,如 Oracle 的 connect by,Substr吗?能支持自己写的函数吗?答案是完全可以的!
最近有个项目在使用 Struts + Hibernate 开发,也碰到使用 Oracle connect by、自定义写的函数的困扰问题,后来查了很多相关的资料,
终于找到一个解决办法(不知是不是最好的?呵,希望你们指点一下):

1、首先把 hibernate.properties 文件的下面这行代码前面的 '#' 符号去掉,加入相应的函数转换另命名,
如下面的sf_getchannelstaff=sf_getchannelstaff,substr=substr[说明:sf_getchannelstaff这个函数是自己写]
hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N',sf_getchannelstaff=sf_getchannelstaff,substr=substr

2、使用 Hibernate 的 createSQLQuery() 函数,关于 createSQLQuery() 函数如何使用,请参考相关文档。下面我使用 createSQLQuery()
函数的一段代码:
                String[] ret = new String[] { "", "", "", "" };
  try {
   this.initSession();
   StringBuffer sql = new StringBuffer();
   sql.append("select {c}.CHANNEL_ID AS {c.channelId},");
   sql.append("{c}.NAME AS {c.name},");
   sql.append("substr(sf_getchannelstaff({c}.CHANNEL_ID,'A'),1,254) AS {c.channelTypeId},");
   sql.append("{c}.UPPER_CHANNEL_ID AS {c.upperChannelId},");
   sql.append("{c}.IS_PRE_DEFINE AS {c.isPreDefine},");
   sql.append("substr(sf_getchannelstaff({c}.CHANNEL_ID,'B'),1,254) AS {c.effDate},");
   sql.append("substr(sf_getchannelstaff({c}.CHANNEL_ID,'C'),1,254) AS {c.expDate},");
   sql.append("{c}.AREA_ID AS {c.areaId},");
   sql.append("{c}.IS_VIRTUAL AS {c.isVirtual}");
   sql.append(" from k_channel {c} where {c}.CHANNEL_ID=:channelId");
   Query query = this.session.createSQLQuery(sql.toString(), "c", ynt43.dao.KChannel.class);
   query.setLong("channelId", channelId);
   List result = query.list();
   if (!result.isEmpty()) {
    ynt43.dao.KChannel t = (ynt43.dao.KChannel) result.get(0);
    ret[0] = UtilBean.GBToUnicode(t.getName());
    ret[1] = UtilBean.GBToUnicode(t.getChannelTypeId());
    ret[2] = UtilBean.GBToUnicode(t.getEffDate());
    ret[3] = UtilBean.GBToUnicode(t.getExpDate());
   }
  }
  finally {
   this.closeSession();
  }
  return ret;
特别说明一下:使用 createSQLQuery() 函数后写 hql 语句时,from 子句后面是跟着数据库表名,而不是对象类名。
分享到:
评论

相关推荐

    hibernate 调用oracle函数

    4. **定义Hibernate Native SQL查询**:由于Hibernate默认不支持调用存储过程或函数,我们需要使用`@NamedNativeQuery`或`@SqlResultSetMapping`注解来定义一个原生SQL查询,用于调用Oracle函数。例如: ```java @...

    详解Hibernate呼叫Oracle的存贮过程和函数

    本示例演示Hibernate 3.2呼叫Oracle的存贮过程和函数,以及通过Hibernate的Query接口简化JDBC的开发步骤--两个步骤得到List集合。使用这种方式开发可以要求开发人员不需要太了解Hibernate框架,但是需要开发人员非常...

    hibernate query调用oracle存储过程

    总之,通过Hibernate的Query接口,我们可以方便地调用Oracle的存储过程和函数,实现复杂的业务逻辑。结合源码和数据库文件,开发者可以更好地理解和应用这些知识。在实际开发中,一定要根据项目需求灵活运用,并遵循...

    在hibernate中实现oracle的自动增长

    本文将深入探讨如何在Hibernate中实现Oracle数据库的自动增长特性,这一功能对于确保数据表中的主键唯一性至关重要。 ### Oracle数据库的自动增长机制 Oracle数据库提供了强大的序列(sequence)功能来支持自动增长...

    JDBC+Hibernate将Blob数据写入Oracle

    在Oracle数据库中,BLOB类型的字段具有特殊的处理方式,尤其在使用JDBC(Java Database Connectivity)和Hibernate框架时,需要特别注意其写入过程。以下是对“JDBC+Hibernate将Blob数据写入Oracle”这一主题的深入...

    java-hibernate调用mysql过程和函数的方式知识.pdf

    Java-Hibernate 框架中调用 MySQL 数据库中的过程和函数是通过 CallableStatement 对象来实现的。下面将详细介绍如何调用 MySQL 中的过程和函数。 调用函数 在 Java 中调用 MySQL 函数可以使用 CallableStatement ...

    机动车在线考试系统 structs1.0+hibernate+oracle

    机动车在线考试系统基于Struts1.0、Hibernate和Oracle数据库技术构建,这是一款典型的Java Web应用,用于管理和组织机动车驾驶者的理论考试。Struts1.0是MVC(Model-View-Controller)架构的一种实现,它帮助开发者...

    hibernate,oracle,3cschool,java编程

    【hibernate,oracle,3cschool,java编程】这些关键词涵盖了Java开发中的核心领域,包括持久化框架Hibernate,数据库管理系统Oracle,以及学习资源3cschool和基础编程知识。以下是对这些主题的详细阐述: 1. ...

    oracle 自定义翻页sql

    为了支持自定义排序和更复杂的分页逻辑,我们可以使用`ROW_NUMBER()`函数,这是Oracle 12c引入的窗口函数。它可以结合`OVER()`子句,允许我们在分页时指定排序依据: ```sql WITH ordered_data AS ( SELECT your_...

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

    ### Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法 在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射...

    java-hibernate调用mysql过程和函数的方式.pdf

    - 示例代码展示了如何在Java程序中连接到Oracle数据库并调用函数。`getConnection`方法用于建立数据库连接,`OraclePro.getConnection()`返回连接对象。 - 对于没有参数的函数,如`get_pname`,创建`...

    Oracle工程师培训教程4

    3. **PL/SQL编程**:PL/SQL是Oracle特有的过程化语言,用于编写存储过程、函数、触发器等。这部分会讲解PL/SQL的基础语法,变量声明、流程控制、异常处理等内容。 4. **Oracle安全管理**:包括用户管理、权限和角色...

    java-hibernate调用mysql过程和函数的方式[归类].pdf

    当需要调用MySQL中的过程和函数时,Hibernate提供了一种方式来实现这一点。下面将详细介绍如何在Java中利用Hibernate调用MySQL的存储过程和函数。 首先,我们需要理解CallableStatement接口,它是PreparedStatement...

    ssh Struts2.2+Hibernate3.6+Spring3.1+oracle 分页示例.zip

    在SSH框架中,分页通常通过Hibernate的Criteria API或者HQL来实现,也可以利用Struts2的拦截器或者自定义插件来处理分页逻辑。在Oracle数据库中,可以使用ROWNUM伪列或分页函数(如DBMS_RLS.PAGE_QUERY)来实现分页...

    hibernate所需包:hibernate3,依赖包,JDBC

    5. **HQL**: Hibernate特有的查询语言,类似于SQL,但更加面向对象。 **依赖包** Hibernate3的运行需要一些依赖库,这些库可能包含在"Hibernate依赖包.zip"中。常见的依赖包括: 1. **JTA(Java Transaction API...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页查询显得尤为重要。Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标...

    创建hibernate的连接池及封装bean类的方式(图解)

    ### 创建Hibernate的连接池及封装Bean类的方式 #### 一、引言 在Java开发中,Hibernate作为一种流行的ORM(对象关系映射)框架,被广泛应用于数据库操作中。通过使用Hibernate,开发者可以更加高效地进行数据库操作...

    oracle分页查询

    Oracle 12c 及更高版本支持 ROW_NUMBER() 函数,可以用来实现分页查询。基本格式如下: ```sql SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY COLUMN_NAME) RN FROM TABLE_NAME) WHERE RN BETWEEN 21...

    hibernate方言

    AccessDialect类则实现了对Access数据库的兼容,包括处理Access特有的数据类型、函数和SQL语句结构。 在实际使用中,开发者需要在Hibernate的配置文件(通常是hibernate.cfg.xml)中指定所使用的方言,例如: ```...

Global site tag (gtag.js) - Google Analytics