专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » hibernate映射:使用Hibernate进行对象的关系映射 »正文

hibernate映射:使用Hibernate进行对象的关系映射

来源: 发布时间:星期四, 2009年1月15日 浏览:56次 评论:0
  Hibernate是业界比较推崇ORM(o/r mapping)目前版本已经非常稳定和成熟而且文档也极其丰富

  Http://www.jdon.com和http://www.chinaxp.com 这两个技术网站WebSite对hibernate讨论很多也很精到

  这篇文章是篇让出学者入门文章现意译如下英文好可以跳过直接阅读原文

  --译者按

  在Java技术中有许多思路方法可以对数据进行持久化持久层也是Java应用中最重要部分的在当今关系型数据库仍为如主流数据库时候我个人认为持久层技术常常并没有得到应用重视在这篇文章里将涉及到几个著名以Java技术实现持久性框架随后我们会谈到些最新持久性框架譬如:Hibernate让我们就从那些著名框架以极其通用APIs开是这次旅行吧

  1.JDBC

  大多数Java开发员都是用JDBC来和数据库进行通信它可以通过DAO(Data Access Object)模式来进行改善和提高然而这种方式在大型应用中则会造成维护"高消费"不过大多数开发员对于JDBC操作以及其API都是非常熟悉因此我相信不管怎样它仍然是目前最被广泛应用数据持久技术的( 不要着急"噩梦马上就要结束了"译者注)

  2.EJB

  据调查EJB通常是在数据持久技术上第 2个选择它是通过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(请到相应官方网站WebSite获取各个最新版本译者注)例子在其他容器中也能正常运行不过我没有进行这方面测试Hibernate网站WebSite有有关在Jboss下配置信息通常几乎所有应用服务器和数据库都能整合Hibernate

  4.1 Mapping Relationships with Hibernate

  下面我们开讨论如何使用Hibernate进行对象关系映射我将介绍如何使用Hibernate进行""、"对多"、"多对多"映射在我提供代码中只是为了测试而没有考虑到更多"模式啦规则啦"等等这就说这里例子只是个启蒙让我们从代码中学习HibernateAPI以及如何进行开发请再你自己书写时候注意必要模式和编码规范标准

  然后我们看看我例子中都有哪些对象让们开始为他们建模吧如下图:

  下图为数据表关系图:

  4.2 配置Hibernate

  点击此处获得本文中例子代码这样你可以对本例有更深了解

  为了运行例子请确信你已经下载过Hibernate和log4j最新发布包同时也要把数据库驱动放到path中下载以后压缩包中有example_schema.ddl文件用来生成数据库表

  接下来作者给我们讲述了个Hibernate.properties文件它是在配置Hibernate时候最先接触到它在应用启动时候为我们进行化工作(译者注:有了hibernate.cfg.xmlHibernate.properties变可有可无了不是吗?)

hibernate.connection.driver_=COM.ibm.db2.jdbc.net.DB2Driver
hibernate.connection.url=jdbc:db2://server1/sample
hibernate.connection.username=db2admin
hibernate.connection.password=password
hibernate.default_schema=db2admin
hibernate.dialect=net.sf.hibernate.dialect.DB2Dialect
hibernate.show_sql=true
  
# The maximum number of active connections that can be allocated # from this pool at the same time, or zero for no limit.
hibernate.dbcp.maxActive 100
# Action to take in of an exhausted DBCP statement pool
# ( 0 = fail, 1 = block, 2= grow)
hibernate.dbcp.whenExhaustedAction 1
hibernate.dbcp.maxWait 120000
# The maximum number of active connections that can re
# idle in the pool, without extra _disibledevent="false"
/>
<!--
To add non XDoclet properties, create a file named
hibernate-properties-User.xml
containing the additional properties and place it in your merge dir.
-->
</>
</hibernate-mapping>




  旦创建完映射文件(放在path 中并且和对象是""关系)你就可以通过Hibernate接口和思路方法来操纵系统对象

  最后说本文中例子下载包中内容个单独例子都有思路方法来运行:第个例子:HibernateDemo.java增加两个users并且和address相关联("");第 2个例子:HibernateDemoOneToMany.java学习用Hibernate进行"对多"映射;最后第 3个例子:HibernateDemoManyToMany.java学习用Hibernate进行"多对多"映射建议你按照顺序运行如果你没有使用DB2 (e.g. sequences).你也可以跟改数据库例子包中还有个例子:HibernateDemoHQL利用前面例子产生数据来介绍说明如何用HQL来操纵数据

  作者提供例子中很简单但对于初学者却是非常好个学习机会(希望初学者对作者代码进行运行尝试有许多东西本文并没有说不过你可以通过作者代码得到答案)希望你能在学习Hibernate时候从此处得到些帮助

  你可以通过Mark Eagle([email protected])和作者联系



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: