使用Hibernate进行对象的关系映射(1)
Hibernate是业界比较推崇的ORM(o/r mapping),目前的版本已经非常稳定和成熟,而且的他的文档也极其丰富。
Http://www.jdon.com 和http://www.chinaXP.com 这两个技术网站对hibernate的讨论很多也很精到。
这篇文章是一篇让出学者入门的文章。
--译者按
在Java技术中有许多方法可以对数据进行持久化,持久层也是Java应用程序中最重要的部分之一。在当今关系型数据库仍为如主流数据库的时候,我个人认为持久层技术经常并没有得到应用的重视。在这篇文章里将涉及到几个闻名的以Java技术实现的持久性框架,随后我们会谈到一些最新的持久性框架譬如:Hibernate,让我们就从那些闻名的框架以极其通用APIs开是这次旅行吧。
1.JDBC
大多数Java开发员都是用JDBC来和数据库进行通信,它可以通过DAO(Data Access Object)模式来进行改善和提高,然而,这种方式在大型应用程序中则会造成维护的"高消费"。不过大多数的开发员对于JDBC的操作以及其API都是非常熟悉,因此,我相信不管怎样它仍然是目前最被广泛应用的数据持久技术之一。( 不要着急"噩梦马上就要结束了",译者注)
2.EJB
据调查EJB通常是在数据持久技术上的第二个选择,它是通过entity beans来对数据进行持久化,这听起来就似乎是Java持久框架界中的"银单"一样(真的有银弹??),我的意思是在巨大的市场下(潜在的一块大蛋糕?)。然而事实上并不是这样的:首先你需要购买一个价位合理的EJB容器--J2EE应用服务器,采用开源项目的免费EJB容器是一种不错的选择:),比如JBOSS(恕我直言);其次全面采用entity bean需要花"大量"的时间来理解EJB规范。在采用EJB之前你通常想在熟练把握它的API;再有就是,你需要知道在每一个容器除了ejb-jar.XML以外所专有的部署描述符,而且很多商业EJB容器的性能和技术支持也不敢恭维。对于JAVA开发员,在EJB中实现JDBC也比较复杂。EJB中最为被关注的可能是无状态的会话BEAN(stateless-Session beans)和消息驱动BEAN(messaging driver beans)
3.更多持久框架
通过对前面两种规范一阵"游移不定和踌躇"以后,你可能发现它们都不是完美的解决方案。JDO的出现似乎有了一些改观,但是JDO1.0不论是从操作方式上还是其功能上对于Java开发员来说似乎"天还是灰蒙蒙的","而且没有一个好的免费的产品",终究JDO1.0仍然没有带来太大改变,人们仍停留在用它来学习的阶段,这种情况有待JDO的成熟来解决。(目前SUN已经加入JDOCENTORL.COM来着手JDO2.0,我们唯有等待那丝曙光了。)
那么我们该怎么做呢?假如你抛开主流于非主流的概念,你会发现你将有更多的选择(也许是更好的?),假如是这样,你不会不注重到这样两个名字"Hibernate"和"OJB",这两种持久框架跟前面的提到的JDBC、EJB和JDO在某些方面有很大的不同,它们不需要任何容器,提供简单易用并符合ODMG3-style APIs,而且它们免费、开源、有丰富的文档和稳定的开发背景。
也许你所要做的仅仅是选择?
4"冬眠"Hibernate
就让我们现在开始吧,在这些"新鲜的"持久框架中我选择了Hibernate,同时当初我也把OJB列入我的选择之列,不过最后之所以选择Hibernate的原因要归功于它丰富的文档,我知道有许多其它的人使用OJB也取得过成功。不管怎么样,Hibernate和OJB都可以让你完全操纵持久层。
请访问http://hibernate.blumears.net/4.Html来获得Hibernate的功能介绍。
下面我想首先说一下我的运行环境:Hibernate 2.0 RC1 (2.0 beta 5)+ Tomcat 4.1.18+WebSphere Application Server 5.0.1(请到相应的官方网站获取各个的最新版本,译者注),我的例子在其他的容器中也能正常的运行,不过我没有进行这方面的测试。Hibernate网站有关于在Jboss下的配置信息,通常几乎所有的应用服务器和数据库都能整合Hibernate。
4.1 Mapping Relationships with Hibernate