浏览 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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-14
值得学习
|
|
返回顶楼 | |
发表时间:2011-11-14
不错,有发展前途。
|
|
返回顶楼 | |
发表时间:2011-11-14
以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了
|
|
返回顶楼 | |
发表时间:2011-11-14
gtssgtss 写道 以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了
hibernate是可以在团队协作中提高一定的效率的,如果直接用sql,要考虑到后面的项目移植性,以及维护成本的. |
|
返回顶楼 | |
发表时间:2011-11-15
最后修改:2011-11-15
foohsinglong 写道 gtssgtss 写道 以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了
hibernate是可以在团队协作中提高一定的效率的,如果直接用sql,要考虑到后面的项目移植性,以及维护成本的. 你看,你只写了一份方言,你是准备现在立刻把hibernate支持的所有数据库方言全部写一遍呢,还是等以后再说?等以后再说的话,那和以后再写sql相比也没什么不同了 |
|
返回顶楼 | |
发表时间:2011-11-15
gtssgtss 写道 foohsinglong 写道 gtssgtss 写道 以前我也是这么做的,可是到后来,我发现完全没有意义,将来只会导致方言甚至是parser无止境的修改,与其这样,不如直接用sql(而且别用hibernate提供的sql),hibernate用来简单的操作就好了
hibernate是可以在团队协作中提高一定的效率的,如果直接用sql,要考虑到后面的项目移植性,以及维护成本的. 你看,你只写了一份方言,你是准备现在立刻把hibernate支持的所有数据库方言全部写一遍呢,还是等以后再说?等以后再说的话,那和以后再写sql相比也没什么不同了 这个得具体用法看具体需求吧,不过你真说对了,我写的还真不止一个,不过只把这个举例来说明了.呵呵.项目中有些地方写SQL和写HQL还得看具体环境是怎样的. |
|
返回顶楼 | |
发表时间:2011-11-16
我觉得这个属于展示方式的问题。不建议在持久层处理。主信息类包含一个明细信息的集合。在JSP页面上遍历这个集合就可以这样输出了,实在犯不上修改Hibernate本身。而且以后如果要改变显示方式,还得重写。
|
|
返回顶楼 | |