查看: 19540|回复: 20

[精华] hibernate杂谈

[复制链接]
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
发表于 2006-12-19 12:05 | 显示全部楼层 |阅读模式
hibernate作为一个数据库操作组件(也许这样称呼是错的),那么,我们使用hibernate,希望它是稳定的,简单的并且有效的为我们使用,那么,我们必须约束一些各方面的规范,当我们的规范成本远小于它所带来的价值,那么我想这是值的推荐的。
一,数据库设计
  1,所有的表设计建议有主键,对于hibernate来说,无主键的表可能就是把所有字段作为一个复合主键来使用,所有说有主键的表会使用在很多方面比较方便,建议尽量不使用复合主键,当复合主键作为外键对应时,mapping文件的配制及vo对像的书写会变的较复杂,(我一项提倡多一事不如少一事的观点)复合主键可以用代理主键代替,java生成的32位随机码uuid值的推荐。
   2,对于hibernate来说,在较大的系统中,数据库表繁多,那么对于hibernate的一些xml、vo、dao文件等,建议用自动生成工具,无论是开源的,还是自己开发的,因为程序出错的概率远比人小的多。那么对于自动生成工具,首先表的字段及表名应该遵守一些规则,具体可根据自身要求定义,结合java中类命名与属性命名进行对应。如表设计中很多情况下加下划线,而在类中不推荐这样做,那么mapping对应时表对应的类名可变为首字母大写、下划线去除、下划线之后字母大写等。
  3,如果是根据数据库设计文件来定义hibernate的这些文件,那么一些注释信息都可以写入这些文件中(如erwin生成的xml文件)。
二,hibernate的使用
   在项目进行中,要清楚自己要用它来干什么,对于oltp系统来说,hibernate主要是用于插入、删除、更新,这些操作基本上都是我们想要的,面向对象的这些操作的确比较方便,我们所希望的是hibernate解决系统中60-70%的数据操作就够了,对于一些复杂的查询,建议用sql吧,hql感觉还是不很方便,毕竟一个程序员,sql书写是应该要掌握的,这无论在什么语言都可能用到,而hql不是必须的。而对于一些简单的查询操作,应该使数据库操作接口定义此种方法,selectByPk,selectByVo等,而这些方法的实现就写入dao吧。
   对于hibernate中的一些对应,我始终觉得,多对多,多对一,一对多,一对一都可以综合成一对多,一对一的关系,说白了用的多的就是找出A表中此字段作为B对应主键的一条记录,而相对B来说就是找出A表中此主键对应B表的一个集合,那么,如果是这样弄的话,简单了很多,mapping文件就可以直接写这两种了,这两种方法感觉是必须的,但如果想省事,那么mapping文件我们都可以不定义,真接把这方法写入dao中,而这两种方法也比较简单,其实就是调用前面所说的B类的selectByPk,B类selectByVo,(当然,这样的话就相当于lazy="true",这个延迟加栽感觉在项目中应该是false的情况比较少,看它很多情况下并不一定要看它的孩子啊-_- ),在能满足技术的要求下,一切从简的方法有利于项目的稳定、加快项目的开发进度。   
  题外话:hibernate作为一种开源的组件资源,它的成功是有目共瞩的,我想hibernate的初衷是为了解决关系数据库与在向对象操作的一种协调,及数据库与对象之间的一种持久、统一机制。但随着它的发展,必然出来很多新的问题,就像以前版本没有批量操作,而在3.0之后加入,包括HQL的扩展,为了解决各种各样的问题,它也会变的越来越膨大,但对于我们的项目来说,我们应该认识到, hibernate能解决我们多少问题,哪些是我们关心的,并不是hibernate所能解决的问题我们都要用到。我公司04年上的项目,用的hibernate是1.1,直到现在也还在用,但基本上也没有什么问题。
     我们解决问题时,不能只是想到hibernate怎么来处理这个问题,更多时间可能从其它方面解决会来的更快,如数据库的设计,利用其它方法,sql等,hibernate只是一个资源,对于一个项目来说,这个资源是大众化的,那么我们就应该只取我们关心的、有用的,我们甚至要考虑学习hibernate的成本,是不是应该项目的每个人都要完全掌握hibernate呢,人员流动情况下怎样保证项目的胜利进行,我们是否能够把hibernate作为一种公用的简易资源来让每程序员使用(程序员只要求知道一些相应接口及一些规范),这种模式在很多公司应该很早就是如此(我当时进公司,用了好几个月的java都不知道自己在用hibernate,还为天下操作数据库就是如此的对象操作,jdbc操作还是以后才知道)。
   好像也打了蛮多字,但感觉没谈到点上,毕竟参加工作时间不长,而且很久都没有写java了(很长时间在搞数据仓库),技术细节方面都不太好深入(技术不够,深入不了),
附上一个好久前写的一个自动生成的东西。
最后一句话:当版主不易啊,就为这点东西,一上午没了

src.rar

14.65 KB, 下载次数: 280

论坛徽章:
35
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
发表于 2006-12-19 13:51 | 显示全部楼层
顶一下,说得十分的中肯!
采用hibernate对数据库设计的要求是十分高的!!!
如果要使用hibernate来开发项目,那么团队中一定要有一个对hibernate十分精通的人!!!
其实最麻烦的还是同步的问题,就是xml配置文件与数据库之间的同步!
比如说数据库表字段更改后,相应的xml也要改变!!!
再还有就是对session的使用!!
特别是在web项目中!!!

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
 楼主| 发表于 2006-12-19 14:09 | 显示全部楼层
如果是自动生成的话,xml文件同部就不是问题,数据库的更改由DBA做,更改好生成配制文件进行同步,开发人员不参与xml文件书写,session是非线程安全,可以放入ThreadLocal类,hibernate文档也是这样推荐的

使用道具 举报

回复
论坛徽章:
35
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
发表于 2006-12-19 15:47 | 显示全部楼层
最初由 piliskys 发布
[B]如果是自动生成的话,xml文件同部就不是问题,数据库的更改由DBA做,更改好生成配制文件进行同步,开发人员不参与xml文件书写,session是非线程安全,可以放入ThreadLocal类,hibernate文档也是这样推荐的 [/B]


这也是不太可能的,不可能什么都由DBA来做!!
在开发的过程中改变数据结构也是经常的事!!!

自动生成并不能解决这个问题!!!

往往我还是建议由系统设计人员来进行数据库表的设计和xml的生成!!而不是由数据库出身的人员来设计数据库表!!!

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
 楼主| 发表于 2006-12-19 16:28 | 显示全部楼层
由DBA是设计数据库那肯定是不行的,我的意思是说,DBA执行,假如设计人员用erwin设计数据库,那么更改数据库中表后,此时要通知DBA,让DBA来控制数据库中表,然后DBA就用erwin来同步所有的数据库,然后再把此erwin生成xml文件,上传至cvs,上传时触发自动生成角本,把所有hibernate的文件vo,dao,xml都生成打包,并且放入项目的合适位置,然后发邮件通知各们开发人员,新的hibernate中vo及mapping文件已生成,请get最新包,一般这种事情都是早晚下做,开发人员一上班就看看邮件进行操作。
    同步的问题在项目中肯定是要有效解决的,以上说的只是一种方式,且已运用于实际。

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2006-12-30 15:31:44生肖徽章:猪
日期:2007-03-25 14:34:17生肖徽章:兔
日期:2007-07-19 16:20:37生肖徽章:马
日期:2007-07-22 04:28:24生肖徽章:虎
日期:2007-07-25 08:23:00生肖徽章:龙
日期:2007-08-02 09:27:04会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2006-12-19 16:45 | 显示全部楼层
就是个持久化的工具

使用道具 举报

回复
论坛徽章:
35
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
发表于 2006-12-19 22:05 | 显示全部楼层
最初由 xuehongliang 发布
[B]就是个持久化的工具 [/B]


不仅仅是持久化工具那么简单

使用道具 举报

回复
论坛徽章:
0
发表于 2006-12-22 13:32 | 显示全部楼层
顶一下,哈哈

使用道具 举报

回复
论坛徽章:
0
发表于 2006-12-26 13:05 | 显示全部楼层
看完

使用道具 举报

回复
论坛徽章:
4
发表于 2006-12-28 14:56 | 显示全部楼层
支持

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表