转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
Hibernate 针对 Oracle 特有函数及自定义函数的实现办法         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:961 更新时间:2009/4/22 22:07:57

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 使用数据库函数的见解,请多多指教 !
                                                                      
               Author: 润名
               2004.03.12 早上


[操作系统]针对不同规模的系统如何科学的查找电脑存在的故障  [系统软件]EXP-00008: ORACLE error 904 encountered的解决方…
[常用软件]PB7 连接 Oracle 的配置方法  [Web开发]oracle Export and Import 简介
[Web开发]ADO访问Oracle结果集的心得  [JAVA开发]Struts+Spring+Hibernate组装web应用
[JAVA开发]JAVA:Hibernate 3新增XML关系持久性介绍  [JAVA开发]扩展 Hibernate 对各类数据源支持
[JAVA开发]Hibernate 3.0 的Formulas编程  [JAVA开发]Hibernate 3.0 的规则应用分析
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台