摘要: 第25章最佳实践(Best Practices)设计细颗粒度的持久类并且使用<component>来实现映射。使用一个Address持久类来封装 street, suburb, state, postcode. 这将有利于代码重用和简化代码重构(refactoring)的工作。对持久类声明标识符属性。Hibernate中标识符属性是可选的,不过有很多原因来说明你应该使用标识符属性。我们建议标识符应该是“人造”的(自动生成,不涉及业务含义)。虽然原生类型从语法上可能更易于使用,但使用long或java.lang.Long没有任何区别,。为每个持久类写一个映射文件不要把所有的持久类映射 阅读全文
posted @ 2011-08-23 22:23 天不行道我来之 阅读(196) 评论(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 天不行道我来之 阅读(207) 评论(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 天不行道我来之 阅读(158) 评论(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 天不行道我来之 阅读(313) 评论(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 天不行道我来之 阅读(157) 评论(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 天不行道我来之 阅读(136) 评论(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 天不行道我来之 阅读(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 天不行道我来之 阅读(125) 评论(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 天不行道我来之 阅读(138) 评论(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 天不行道我来之 阅读(178) 评论(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 天不行道我来之 阅读(139) 评论(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 天不行道我来之 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 第13章 拦截器与事件(Interceptors and events)应用程序能够响应Hibernate内部产生的特定事件是非常有用的。这样就允许实现某些通用的功能 以及允许对Hibernate功能进行扩展。13.1. 拦截器(Interceptors)Interceptor接口提供了从会话(session)回调(callback)应用程序(application)的机制, 这种回调机制可以允许应用程序在持久化对象被保存、更新、删除或是加载之前,检查并(或)修改其 属性。一个可能的用途,就是用来跟踪审核(auditing)信息。例如:下面的这个拦截器,会在一个实现了 Auditable接口的 阅读全文
posted @ 2011-08-23 22:15 天不行道我来之 阅读(130) 评论(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 天不行道我来之 阅读(159) 评论(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 天不行道我来之 阅读(141) 评论(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 天不行道我来之 阅读(168) 评论(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 天不行道我来之 阅读(205) 评论(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 天不行道我来之 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 第7章集合类(Collections)映射7.1.持久化集合类(Persistent collections)(译者注:在阅读本章的时候,以后整个手册的阅读过程中,我们都会面临一个名词方面的问题,那就是“集合”。"Collections"和"Set"在中文里对应都被翻译为“集合”,但是他们的含义很不一样。Collections是一个超集,Set是其中的一种。大部分情况下,本译稿中泛指的未加英文注明的“集合”,都应当理解为“Collections”。在有些二者同时出现,可能造成混淆的地方,我们用“集合类”来特指“Collecions”,“集合(Set)”来 阅读全文
posted @ 2011-08-23 22:09 天不行道我来之 阅读(153) 评论(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 天不行道我来之 阅读(237) 评论(0) 推荐(0) 编辑
摘要: web.xml配置:<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun 阅读全文
posted @ 2012-02-12 16:41 天不行道我来之 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 因为在Struts中有国际化的问题,虽然用不是很多,不过还是得了解下,在MyEclipse8.5中编写*.properties文件,中文真的是很头疼,没法直接写,得用工具转,挺讨厌的。因为知道有propertieseditor,所以还是蛮开心的。不过安装还是遇到了问题,在网上搜索到的大多都是MyEclipse7.X和以前低版本的。正经的MyEclipse8.X里怎么安装,却没有看到。弄了好久,都没搞好,有点郁闷,然后换了其他的想法,因为之前有安装spket的经历,所以想是不是propertieseditor也是这么来呢?将下载的文件,里面有features、plugins,在MyEclipse 阅读全文
posted @ 2012-02-11 18:58 天不行道我来之 阅读(194) 评论(0) 推荐(0) 编辑