论坛首页 Java企业应用论坛

Hibernate 支持wm_concat等函数

浏览 8809 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-14   最后修改:2011-11-14
背景:由于项目需要,我们在查询主信息时,可能需要通过某些明细信息来查找主信息.或者很多行转列中要用到wmsys.wm_concat这个函数.
引用
主明细结构:即一对多结构
例如:订单头,订单明细


实现方法:我们只需要将hibernate中使用的方言改成这个类,这个类继承oracle方言,并在构造函数中加上我们数据库中的函数即可(也可以是自定义函数)

TmsOracle9Dialect.java
package com.vtradex.stms.server.service.dialect;
import org.hibernate.Hibernate;
import org.hibernate.dialect.Oracle9Dialect;
import org.hibernate.dialect.function.StandardSQLFunction;

/**
 * @author  <a href="mailto:foohsinglong@gmail.com">kevin.long</a>
 * @description
 */
public class TmsOracle9Dialect extends Oracle9Dialect {
	
	public TmsOracle9Dialect(){
		super();
		registerFunction("wm_concat", new StandardSQLFunction("wm_concat", Hibernate.STRING));
	}
}


hibernate.properties
# $Id: hibernate.properties,v 1.13 2011/11/11 14:29:51 kevin.long Exp $

# (only applied with "dataSourceContext-hibernate.xml")
#hibernate.dialect=org.hibernate.dialect.MySQLDialect
#hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
#hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.dialect=com.vtradex.stms.server.service.dialect.TmsOracle9Dialect

#hibernate.default_schema=cjtms
hibernate.format_sql=true
hibernate.show_sql=false
hibernate.hbm2ddl.auto=none

hibernate.query.substitutions true=1, false=0
hibernate.max_fetch_depth=0
hibernate.jdbc.fetch_size=50
hibernate.jdbc.batch_size=25
hibernate.cglib.use_reflection_optimizer=true
hibernate.jdbc.use_scrollable_resultset=true
#hibernate.cache.provider_cache=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_second_level_cache=false
hibernate.cache.use_query_cache=false




原文连接: http://foohsinglong.iteye.com/blog/1258416
  • 大小: 25.8 KB
   发表时间:2011-11-14  
值得学习
0 请登录后投票
   发表时间:2011-11-14  
不错,有发展前途。
0 请登录后投票
   发表时间:2011-11-14  
以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了
0 请登录后投票
   发表时间:2011-11-14  
gtssgtss 写道
以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了

hibernate是可以在团队协作中提高一定的效率的,如果直接用sql,要考虑到后面的项目移植性,以及维护成本的.
0 请登录后投票
   发表时间:2011-11-15   最后修改:2011-11-15
foohsinglong 写道
gtssgtss 写道
以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了

hibernate是可以在团队协作中提高一定的效率的,如果直接用sql,要考虑到后面的项目移植性,以及维护成本的.


你看,你只写了一份方言,你是准备现在立刻把hibernate支持的所有数据库方言全部写一遍呢,还是等以后再说?等以后再说的话,那和以后再写sql相比也没什么不同了
1 请登录后投票
   发表时间:2011-11-15  
gtssgtss 写道
foohsinglong 写道
gtssgtss 写道
以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了

hibernate是可以在团队协作中提高一定的效率的,如果直接用sql,要考虑到后面的项目移植性,以及维护成本的.


你看,你只写了一份方言,你是准备现在立刻把hibernate支持的所有数据库方言全部写一遍呢,还是等以后再说?等以后再说的话,那和以后再写sql相比也没什么不同了

这个得具体用法看具体需求吧,不过你真说对了,我写的还真不止一个,不过只把这个举例来说明了.呵呵.项目中有些地方写SQL和写HQL还得看具体环境是怎样的.
0 请登录后投票
   发表时间:2011-11-16  
我觉得这个属于展示方式的问题。不建议在持久层处理。主信息类包含一个明细信息的集合。在JSP页面上遍历这个集合就可以这样输出了,实在犯不上修改Hibernate本身。而且以后如果要改变显示方式,还得重写。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics