Flyingis

Talking and thinking freely !
Flying in the world of GIS !
随笔 - 156, 文章 - 16, 评论 - 589, 引用 - 0
数据加载中……

Hibernate的灵活与方便

    作者:Flyingis

    许多软件设计的思维都源于生活的方方面面,可能存在某些设计思想并非受平时生活所启迪,但它们面临的情况却如此相象。软件设计原本就是生活的一部分,软件设计的“灵活”与“方便”(或“简便”)即是世界万物的一个共同点。

    Hibernate作为流行的企业应用和关系数据库之间的持久化中间件,受到越来越多的关注。虽然使用Hibernate可以使得项目易于维护,帮助开发人员更好地处理复杂关系模型,提供了很强的方便性,但却失去了JDBC原有的灵活性。如何在“灵活”与“方便”之间取舍、平衡显得重要起来。

    不久前江南白衣的一篇文章ORM透明持久化方案面对的共同困境道出了现在ORM不尽如人意的地方,除了网上,还有书本的前言等对Hibernate的众多赞美之词外,现在讨论它呆板、配置繁琐的声音也逐渐多了起来,最热闹的就是前段时间Ruby on Rails引起J2EE阵营的骚动。个人对Java研究尚浅,对Hibernate有一些使用心得,下面所列出的不一定是Hibernate本身的缺陷,不足之处希望大家拍砖指出。

1.  提取表单中字典Value的不便。
    字典一般由ID和NAME两个字段组成,其ID号存储于数据库其他表中,当查询这些表信息时,Hibernate以List或Set形式返回的结果,没有办法将ID号显示为对应的NAME。在JDBC中,可以直接通过Map来存储字典,通过map.getValue()来返回字典的值。

2.  Hibernate内置映射类型复杂化
    在开发过程中,时常会查找Hibernate映射类型--Java类型--标准SQL类型之间的关系。繁杂之处体现在两方面,一是各种数据库的数据类型和标准SQL之间会有一定的出入,二是Hibernate映射类型虽然大部分和Java类型相同,但也存在比较晦涩的地方,例如character类型对应Java的char / java.lang.Character / java.lang.String,text对应着Java的java.lang.String。

3.  ID规定化生成
    Hibernate中内置标识符生成器给表单ID自动生成提供了方便,但却不能自定义各种ID形式。开发过程中,有时需要特定的ID号来区分各种字典,例如字典1的ID号为1A,2A……,字典2的ID号为1B,2B……,当这些ID号存储在表单中时,可以方便开发人员在数据库中查找各表单存储各类字典数据的情况,方便调试,但使用Hibernate生成器就失去了这种灵活性。

    Hibernate的不足网上已有很多讨论,以上只是个人增加的几点体会。即使这样,Hibernate仍是一款优秀的持久层插件,只是“灵活”的背后隐藏着“复杂”,“方便”的背后隐藏着“不便”,如何取舍与平衡,还是看实际需要吧。

posted on 2006-01-14 10:22 Flyingis 阅读(2570) 评论(5)  编辑  收藏 所属分类: Hibernate

评论

# re: Hibernate的灵活与方便  回复  更多评论   

Hibernate不能自定义生成UUID??接触不太多,但印象中好像可以通过继承来创建自己UUID生成的类吧?
2006-01-14 10:55 | 汉尼

# re: Hibernate的灵活与方便  回复  更多评论   

uuid.hex用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串,它包含:IP地址,JVM的启动时间(精确到1/4秒),系统时间和一个计数器值(在JVM中唯一)。要完全自定义的ID好像没有看到比较直接的方法。
2006-01-14 11:02 | Flyingis

# re: Hibernate的灵活与方便  回复  更多评论   


1.可以使用formula来操作: <property name="name" formula="( select s.name from yourtable s where s.id = id )" type="java.lang.String">

3.可以自己写id生成器。




2006-01-16 11:00 | lizongbo

# re: Hibernate的灵活与方便  回复  更多评论   

理解偏差吧, ID本来就不应该带业务规则,这是数据库设计的基本啊.

2006-01-16 11:12 | nickey

# re: Hibernate的灵活与方便  回复  更多评论   

@ lizongbo
感谢你对第一点提供的思路。
id生成器我就是自己写的来满足项目这种需要。具体见
http://www.blogjava.net/flyingis/archive/2005/11/06/18471.html

◎ nickey
数据库设计我不熟,但ID写成1A,2A等等对设计有什么不好的影响吗?
2006-01-16 21:07 | Flyingis

只有注册用户登录后才能发表评论。


网站导航: