摘要:
第25章最佳实践(Best Practices)设计细颗粒度的持久类并且使用<component>来实现映射。使用一个Address持久类来封装 street, suburb, state, postcode. 这将有利于代码重用和简化代码重构(refactoring)的工作。对持久类声明标识符属性。Hibernate中标识符属性是可选的,不过有很多原因来说明你应该使用标识符属性。我们建议标识符应该是“人造”的(自动生成,不涉及业务含义)。虽然原生类型从语法上可能更易于使用,但使用long或java.lang.Long没有任何区别,。为每个持久类写一个映射文件不要把所有的持久类映射 阅读全文
posted @ 2011-08-23 22:23
天不行道我来之
阅读(215)
评论(0)
推荐(0)
摘要:
第24章示例:复杂映射实例本章展示了一些较为复杂的关系映射。24.1.Employer(雇主)/Employee(雇员)下面关于Employer 和 Employee的关系模型使用了一个真实的实体类 (Employment)来表述,这是因为对于相同的雇员和雇主可能会有多个雇佣时间段。 对于金额和雇员姓名,用Components建模。映射文件可能是这样:<hibernate-mapping> <class name="Employer" table="employers"> <id name="id"> 阅读全文
posted @ 2011-08-23 22:22
天不行道我来之
阅读(217)
评论(0)
推荐(0)
摘要:
第22章示例:父子关系(Parent Child Relationships)刚刚接触Hibernate的人大多是从父子关系(parent / child type relationship)的建模入手的。父子关系的建模有两种方法。由于种种原因,最方便的方法是把Parent和Child都建模成实体类,并创建一个从Parent指向Child的<one-to-many>关联,对新手来说尤其如此。还有一种方法,就是将Child声明为一个<composite-element>(组合元素)。 事实上在Hibernate中one to many关联的默认语义远没有composite 阅读全文
posted @ 2011-08-23 22:21
天不行道我来之
阅读(345)
评论(0)
推荐(0)
摘要:
第23章示例:Weblog 应用程序23.1.持久化类下面的持久化类表示一个weblog和在其中张贴的一个贴子。他们是标准的父/子关系模型,但是我们会用一个有序包(ordered bag)而非集合(set)。package eg;import java.util.List;public class Blog { private Long _id; private String _name; private List _items; public Long getId() { return _id; } public List getItems(... 阅读全文
posted @ 2011-08-23 22:21
天不行道我来之
阅读(164)
评论(0)
推荐(0)
摘要:
第20章提升性能20.1. 抓取策略(Fetching strategies)抓取策略(fetching strategy) 是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略。抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL 或条件查询(Criteria Query)中重载声明。Hibernate3 定义了如下几种抓取策略:连接抓取(Join fetching) - Hibernate通过 在SELECT语句使用OUTER JOIN(外连接)来 获得对象的关联实例或者关联集合。查询抓取(Select fet 阅读全文
posted @ 2011-08-23 22:20
天不行道我来之
阅读(139)
评论(0)
推荐(0)
摘要:
第21章工具箱指南可以通过一系列Eclipse插件、命令行工具和Ant任务来进行与Hibernate关联的转换。除了Ant任务外,当前的Hibernate Tools也包含了Eclipse IDE的插件,用于与现存数据库的逆向工程。Mapping Editor: Hibernate XML映射文件的编辑器,支持自动完成和语法高亮。它也支持对类名和属性/字段名的语义自动完成,比通常的XML编辑器方便得多。Console: Console是Eclipse的一个新视图。除了对你的console配置的树状概览,你还可以获得对你持久化类及其关联的交互式视图。Console允许你对数据库执行HQL查询,并 阅读全文
posted @ 2011-08-23 22:20
天不行道我来之
阅读(162)
评论(0)
推荐(0)
摘要:
第19章XML映射注意这是Hibernate 3.0的一个实验性的特性。这一特性仍在积极开发中。 19.1.用XML数据进行工作Hibernate使得你可以用XML数据来进行工作,恰如你用持久化的POJO进行工作那样。解析过的XML树 可以被认为是另外一种在对象层面上代替POJO来表示关系型数据的途径.Hibernate支持采用dom4j作为操作XML树的API。你可以写一个查询从数据库中检索出 dom4j树,随后你对这颗树做的任何修改都将自动同步回数据库。你甚至可以用dom4j解析 一篇XML文档,然后使用Hibernate的任一基本操作将它写入数据库: persist(), saveOrU 阅读全文
posted @ 2011-08-23 22:19
天不行道我来之
阅读(151)
评论(0)
推荐(0)
摘要:
第17章Native SQL查询你也可以使用你的数据库的Native SQL语言来查询数据。这对你在要使用数据库的某些特性的时候(比如说在查询提示或者Oracle中的 CONNECT关键字),这是非常有用的。这就能够扫清你把原来直接使用SQL/JDBC 的程序迁移到基于 Hibernate应用的道路上的障碍。Hibernate3允许你使用手写的sql来完成所有的create,update,delete,和load操作(包括存储过程)17.1.创建一个基于SQL的QuerySQL查询是通过SQLQuery接口来控制的,它是通过调用Session.createSQLQuery()方法来获得List 阅读全文
posted @ 2011-08-23 22:18
天不行道我来之
阅读(140)
评论(0)
推荐(0)
摘要:
第18章过滤数据Hibernate3 提供了一种创新的方式来处理具有“显性(visibility)”规则的数据,那就是使用Hibernate filter。 Hibernate filter是全局有效的、具有名字、可以带参数的过滤器, 对于某个特定的Hibernate session您可以选择是否启用(或禁用)某个过滤器。18.1.Hibernate 过滤器(filters)Hibernate3新增了对某个类或者集合使用预先定义的过滤器条件(filter criteria)的功能。过滤器条件相当于定义一个 非常类似于类和各种集合上的“where”属性的约束子句,但是过滤器条件可以带参数。 应用 阅读全文
posted @ 2011-08-23 22:18
天不行道我来之
阅读(130)
评论(0)
推荐(0)
摘要:
第16章 条件查询(Criteria Queries)具有一个直观的、可扩展的条件查询API是Hibernate的特色。16.1.创建一个Criteria 实例org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();16.2.限制结果集内容一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。or 阅读全文
posted @ 2011-08-23 22:17
天不行道我来之
阅读(182)
评论(0)
推荐(0)
摘要:
第14章批量处理(Batch processing)使用Hibernate将 100 000 条记录插入到数据库的一个很自然的做法可能是这样的Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer);}tx.commit();session.close();这段程序大概... 阅读全文
posted @ 2011-08-23 22:16
天不行道我来之
阅读(259)
评论(0)
推荐(0)
摘要:
第15章HQL: Hibernate查询语言Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。15.1.大小写敏感性问题除了Java类与属性的名称外,查询语句对大小写并不敏感。 所以 SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等价于 org.hibernate.eg.Foo 并且 foo.barSet 也不等价于 foo.BARSET。本手册中的HQL关键字将使用小写字母. 阅读全文
posted @ 2011-08-23 22:16
天不行道我来之
阅读(140)
评论(0)
推荐(0)
摘要:
第13章 拦截器与事件(Interceptors and events)应用程序能够响应Hibernate内部产生的特定事件是非常有用的。这样就允许实现某些通用的功能 以及允许对Hibernate功能进行扩展。13.1. 拦截器(Interceptors)Interceptor接口提供了从会话(session)回调(callback)应用程序(application)的机制, 这种回调机制可以允许应用程序在持久化对象被保存、更新、删除或是加载之前,检查并(或)修改其 属性。一个可能的用途,就是用来跟踪审核(auditing)信息。例如:下面的这个拦截器,会在一个实现了 Auditable接口的 阅读全文
posted @ 2011-08-23 22:15
天不行道我来之
阅读(138)
评论(0)
推荐(0)
摘要:
第12章事务和并发Hibernate的事务和并发控制很容易掌握。Hibernate直接使用JDBC连接和JTA资源,不添加任何附加锁定 行为。我们强烈推荐你花点时间了解JDBC编程,ANSI SQL查询语言和你使用 的数据库系统的事务隔离规范。Hibernate只添加自动版本管理,而不会锁 定内存中的对象,也不会改变数据库事务的隔离级别。基本上,使用 Hibernate就好像直接使用JDBC(或者JTA/CMT)来访问你的数据库资源。除了自动版本管理,针对行级悲观锁定,Hibernate也提供了辅助的API,它使用了 SELECT FOR UPDATE的SQL语法。本章后面会讨论这个API。我 阅读全文
posted @ 2011-08-23 22:14
天不行道我来之
阅读(170)
评论(0)
推荐(0)
摘要:
第11章与对象共事Hibernate是完整的对象/关系映射解决方案,它提供了对象状态管理(state management)的功能,使开发者不再需要理会底层数据库系统的细节。 也就是说,相对于常见的JDBC/SQL持久层方案中需要管理SQL语句,Hibernate采用了更自然的面向对象的视角来持久化Java应用中的数据。换句话说,使用Hibernate的开发者应该总是关注对象的状态(state),不必考虑SQL语句的执行。 这部分细节已经由Hibernate掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。11.1.Hibernate对象状态(object states)Hibern 阅读全文
posted @ 2011-08-23 22:12
天不行道我来之
阅读(149)
评论(0)
推荐(0)
摘要:
第10章继承映射(Inheritance Mappings)10.1. 三种策略Hibernate支持三种基本的继承映射策略:每个类分层结构一张表(table per class hierarchy)每个子类一张表(table per subclass)每个具体类一张表(table per concrete class)此外,Hibernate还支持第四种稍有不同的多态映射策略:隐式多态(implicit polymorphism)对于同一个继承层次内的不同分支,可以采用不同的映射策略,然后用隐式多 态来完成跨越整个层次的多态。但是在同一个<class>根元素 下,Hibernat 阅读全文
posted @ 2011-08-23 22:11
天不行道我来之
阅读(176)
评论(0)
推荐(0)
摘要:
第9章组件(Component)映射Component这个概念在Hibernate中几处不同的地方为了不同的目的被重复使用.9.1.依赖对象(Dependent objects)Component是一个被包含的对象,它作为值类型被持久化,而非一个被引用的实体。“component(组件)”这一术语指的是面向对象的合成概念(而并不是系统构架层次上的组件的概念)举个例子, 你可以对人(Person)如以下这样来建模:public class Person { private java.util.Date birthday; private Name name; private S... 阅读全文
posted @ 2011-08-23 22:10
天不行道我来之
阅读(218)
评论(0)
推荐(0)
摘要:
第8章关联关系映射8.1.介绍关联关系映射通常情况是最难配置正确的。在这个部分中,我们从单向关系映射开始,然后考虑双向关系映射,由浅至深讲述一遍典型的案例。在所有的例子中,我们都使用 Person和Address。我们根据映射关系是否涉及连接表以及多样性来划分关联类型。在传统的数据建模中,允许为Null值的外键被认为是一种不好的实践,因此我们所有的例子中都使用不允许为Null的外键。这并不是Hibernate的要求,即使你删除掉不允许为Null的约束,Hibernate映射一样可以工作的很好。8.2.单向关联(Unidirectional associations)8.2.1.多对一(many 阅读全文
posted @ 2011-08-23 22:09
天不行道我来之
阅读(121)
评论(0)
推荐(0)
摘要:
第7章集合类(Collections)映射7.1.持久化集合类(Persistent collections)(译者注:在阅读本章的时候,以后整个手册的阅读过程中,我们都会面临一个名词方面的问题,那就是“集合”。"Collections"和"Set"在中文里对应都被翻译为“集合”,但是他们的含义很不一样。Collections是一个超集,Set是其中的一种。大部分情况下,本译稿中泛指的未加英文注明的“集合”,都应当理解为“Collections”。在有些二者同时出现,可能造成混淆的地方,我们用“集合类”来特指“Collecions”,“集合(Set)”来 阅读全文
posted @ 2011-08-23 22:09
天不行道我来之
阅读(163)
评论(0)
推荐(0)
摘要:
第6章对象/关系数据库映射基础(Basic O/R Mapping)6.1.映射定义(Mapping declaration)对象和关系数据库之间的映射通常是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的, 并且可以手工修改。映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的, 而非表的定义。请注意,虽然很多Hibernate用户选择手写XML映射文档,但也有一些工具可以用来生成映射文档, 包括XDoclet,Middlegen和AndroMDA。让我们从一个映射的例子开始:<?xml version="1.0" 阅读全文
posted @ 2011-08-23 22:07
天不行道我来之
阅读(253)
评论(0)
推荐(0)
摘要:
第5章持久化类(Persistent Classes)在应用程序中,用来实现业务问题实体的(如,在电子商务应用程序中的Customer和Order) 类就是持久化类。不能认为所有的持久化类的实例都是持久的状态——一个实例的状态也可能 是瞬时的或脱管的。如果这些持久化类遵循一些简单的规则,Hibernate能够工作得最好,这些规则被称作, 简单传统Java对象(POJO:Plain Old Java Object)编程模型。但是这些规则没有一个是必需的。 实际上,Hibernate3对于你的持久化类几乎不做任何设想。你可以用其他的方法来表达领域模型: 比如,使用Map实例的树型结构。5.1.一个 阅读全文
posted @ 2011-08-23 22:02
天不行道我来之
阅读(158)
评论(0)
推荐(0)
摘要:
第4章 配置由于Hibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的配置参数. 幸运的是多数配置参数都 有比较直观的默认值, 并有随Hibernate一同分发的配置样例hibernate.properties (位于etc/)来展示各种配置选项. 所需做的仅仅是将这个样例文件复制到类路径 (classpath)下做一些自定义的修改.4.1. 可编程的配置方式一个org.hibernate.cfg.Configuration实例代表了一个应用程序中Java类型 到SQL数据库映射的完整集合. Configuration被用来构建一个(不可变的 (immutable))Ses 阅读全文
posted @ 2011-08-23 21:57
天不行道我来之
阅读(135)
评论(0)
推荐(0)
摘要:
第3章体系结构(Architecture)3.1.概况(Overview)一个非常简要的Hibernate体系结构的概要图:从这个图可以看出,Hibernater使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。我们来更详细地看一下Hibernate运行时体系结构。由于Hibernate非常灵活,且支持数种应用方案, 所以我们这只描述一下两种极端的情况。“轻型”的体系结构方案,要求应用程序提供自己的JDBC 连接并管理自己的事务。这种方案使用了Hibernate API的最小子集:“全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来,而让Hiberna 阅读全文
posted @ 2011-08-23 21:55
天不行道我来之
阅读(150)
评论(0)
推荐(0)
摘要:
第2章 Hibernate入门2.1. 前言本章是面向Hibernate初学者的一个介绍教程。我们将使用容易理解的方式,开发一个使用驻留内存式(in-memory)数据库的简单命令行程序。本教程是面向Hibernate初学者,但是需要一定的Java和SQL知识。 它在Michael Goegl所写的一个教程的基础上完成的。我们使用的第三方库文件是支持JDK 1.4和5.0。如果你要使用JDK1.3,可能会需要其它的库。2.2. 第一部分 - 第一个Hibernate程序首先我们将创建一个简单的控制台(console-based)Hibernate程序。我们使用内置数据库(in-memory d 阅读全文
posted @ 2011-08-23 21:53
天不行道我来之
阅读(144)
评论(0)
推荐(0)
摘要:
第1章在Tomcat中快速上手1.1.开始Hibernate之旅这份教程描述如何在Apache Tomcat servlet容器中为web应用程序配置Hibernate 3.0(我们使用Tomcat 4.1版本,与5.0版本差别很小)。Hibernate在大多数主流J2EE应用服务器 的运行环境中都可以工作良好,甚至也可以在独立Java应用程序中使用。在本教程中使用的示例数据库系统是PostgreSQL 7.4,只需要修改Hibernate SQL语言配置与连接属性,就可以 很容易的支持其他数据库了。第一步,我们必须拷贝所有需要的库文件到Tomcat安装目录中。在这篇教程中,我们使用一个独立的 阅读全文
posted @ 2011-08-23 21:51
天不行道我来之
阅读(186)
评论(0)
推荐(0)