Hibernate
菖草
每天进步一点一点,时间长了肯定会有巨大的提升,希望能和大家多多交流经验,共同进步。
展开
-
Hibernate实战_笔记34(映射枚举、实现EnhanceUserType接口)
映射枚举枚举类型是一个常见的Java惯用语,其中类有着(小)数量不变的不可变实例。1、在JDK5.0中使用枚举如果使用JDK5.0,可以给类型安全的枚举使用内建的语言支持。例如,Rating类看起来如下:package auction.model;public enum Rating{ EXCELLENT, OK, BAD}Comment类有这个类型的一个属性:publ原创 2014-03-28 21:03:19 · 1476 阅读 · 0 评论 -
Hibernate实战_笔记23(映射持久化)
理解实体和值类型 实体是表述一级业务对象的持久化类型。换句话说,你在一个应用程序中必须处理的有些类和类型更为重要,它一般使得其他的类和类型变得比较不重要。你可能会认同这种说法:在CaveatEmptor中,Item是比String更重要的类。User可能比Address更重要。是什么使得有些东西变得重要呢?让我们换个角度来看这个问题。细粒度的领域模型 Hiberna原创 2014-03-16 13:39:01 · 787 阅读 · 0 评论 -
Hibernate实战_笔记13(切换回Hibernate接口)
切换到Hibernate接口决定用Hibernate作为JPA持久化的提供程序有几个原因:首先,Hibernate是一个很好的JPA实现,它提供许多不影响代码的选项。例如可以在JPA配置中启用Hibernate的二级数据高速缓存,并透明地提升应用的性能和可量测性,而不需要动任何代码。其次,必要时可以使用原生的Hibernate映射或API。但是这里我们要说明,需要的时候,你如何能够可以在J原创 2014-03-10 15:14:26 · 807 阅读 · 0 评论 -
Hibernate实战_笔记11(EJB容器JBoss)
引入EJB组件当你还使用EJB3.0会话bean和消息驱动的bean(和其他Java EE5.0标准)时,Java Persistence就开始初露锋芒。EJB3.0规范已经被设计为允许持久化的整合,因为你可以在Bean方法范围获得自动的事务划分,或者跨越状态会话EJB生命周期的一个持久化上下文(如Session)。这次内容是从一个托管的JavaEE环境中的EJB3.0和JPA开始,你将再原创 2014-03-10 13:42:02 · 940 阅读 · 0 评论 -
Hibernate实战_笔记22(表示XML中的数据)
表示XML中的数据 XML只是一种文本文件格式;它没有成为数据存储或者数据管理的媒介的继承能力。XML数据模型是脆弱的,它的类型系统复杂且低能,它的数据完整性几乎完全程序化,并且它还引入了几十年前就淘汰了的分层数据结构。然而,XML格式的数据对于在Java中使用却很在吸引力;因为我们有一些好工具。例如,可以用XSLT转换XML数据,这是我们认为最佳的使用案例之一。 Hi原创 2014-03-14 22:04:23 · 817 阅读 · 0 评论 -
Hibernate实战_笔记21(创建动态的应用程序)
创建动态的应用程序 动态的领域模型是一个被动态地输入的模型。例如,不是用表示一件拍卖货品的Java类,而是在一个Java Map中使用许多值。1、映射实体名称首先,要通过命名业务实体启用这个策略。在一个Hibernate XML映射文件中,使用entity-name属性: SEQ_ITEM_ENTITY_ID原创 2014-03-14 17:20:26 · 757 阅读 · 0 评论 -
Hibernate实战_笔记20(全局XML映射元数据、全局的注解元数据、占位符)
1、全局的XML映射元数据 如果检查XML映射DTD,会看到根元素有全局的选项,被应用到它内部的(多个)类映射——这些选项中有一些如下列例子所示:<hibernate-mapping schema="SYSTEM" default-lazy="true" default-access="field" auto-import="false">sch原创 2014-03-14 17:12:04 · 1283 阅读 · 0 评论 -
Hibernate实战_笔记9(JPA与Hibernate的区别)
启动Java Persistence项目通过JPA和新EJB3.0标准的一些优势,以及注解和标准的编程接口简化应用程序开发,与Hibernate进行比较,显然,如果你不时需要在不同的运行时环境下移植或者部署应用程序,设计和链接到标准的接口就是一个优势。尽管除了可移植性之外,还有许多很好的理由来深入探讨JPA。现在将引导你进行另一个“Hello World”示例,这次用Hibernate A原创 2014-03-07 19:49:34 · 976 阅读 · 0 评论 -
Hibernate实战_笔记2(Hibernate范未不匹配问题)
现在,看一下当我们考虑更现实一点的事情时会发生什么。当给应用程序添加更多的实体和实体关系时,范式不匹配的问题显而易见了。上面笔记的最明显问题是把地址设计成了一个简单的String值。在大部分系统中,必需分别保存街道、城市、省/州、国家和邮政编码的信息。当然,可以直接给User类添加这些属性,但是由于系统中的其他类极有可能也含有地址信息,这使得创建一个单独的Address类变得更有意义了。更新过原创 2014-03-06 16:58:16 · 1436 阅读 · 0 评论 -
Hibernate实战_笔记6(第一个Hibernate项目)
本章内容1、用Hibernate和Java Persistence实现“Hello World”2、正向和反向工程的工具集3、Hibernate配置和整合启动Hibernate项目在有些项目中,应用程序的开发是通过开发人员以面向对象方式分析业务领域来驱动的。在其他项目中,则深受现有关系数据模型的影响,比如一个遗留的数据库或者由专业的数据建模者设计的一个全新模式。当我原创 2014-03-07 11:47:22 · 1248 阅读 · 0 评论 -
Hibernate实战_笔记18(基于注解的元数据)
基于注解的元数据基本思想是把元数据与它所描述的信息放在一起,而不是所它分离到一个不同的文件中去。Java在JDK5.0之前并不具备这项功能,因此开发了一种可供选择的方案。XDoclet项目使用支持键/值对的特殊Javadoc标签,引入了包含元信息的Java源代码的注解。通过标签的嵌套,非常复杂的结构也得到了支持,但是只有一些IDE允许为自动突破性呈验证定制Javadoc模板。Java规范请原创 2014-03-12 22:23:40 · 1016 阅读 · 0 评论 -
Hibernate实战_笔记24(主键生成策略、类映射选项)
数据库主键Hibernate需要知道你生成主键的首选策略。不过,先要定义主键。1、选择主键备选的键是能够用来识别表中一个特定行的一列或者一组列。要变成主键,备选键必须满足下列属性:1)它的值(对于备选键的任意列而言)永远不为空。2)每一行都有唯一的值。3)一个特定行的值永远不变。2、选择键生成器Hibernate有几个内建的标识符生成策略。生成器名称:nativ原创 2014-03-16 16:53:19 · 1116 阅读 · 1 评论 -
Hibernate实战_笔记33(创建CompositeUserType、参数化定制类型)
创建CompositeUserTypepublic class MonetaryAmountCompositeUserType implements CompositeUserType{ @SuppressWarnings("unchecked") public Class returnedClass() { return MonetaryAmount.class; } pub原创 2014-03-28 20:57:44 · 1141 阅读 · 0 评论 -
Hibernate实战_笔记32(考虑定制的映射类型、创建UserType)
考虑定制的映射类型拿前面章节的的Address类的映射作为组件来举例: 这个值类型映射很简单,用户自定义的新Java类型的所有属性都被映射到内建的SQL数据类型的单独的列。然而,也可以选择利用一个定制的映射类型把它当作一个简单的属性来映射: 当然,在这个例子中,使用定制的映射类型替换组件映射的好处是令人置疑的。只要在加载和保存这个对象时不需要原创 2014-03-28 20:50:38 · 1540 阅读 · 0 评论 -
Hibernate实战_笔记31(混合继承策略、如何选择策略)
混合继承策略可以把一个类层次结构映射到单张表,但是对于特定的子类,则通过外键映射策略切换到单独的表,就像使用每个子类一张表一样。使用映射元素,这种转换是可能的: 元素集合了一些属性,并告诉Hibernate到一个二级表中获取它们原创 2014-03-27 23:19:01 · 1049 阅读 · 0 评论 -
Hibernate实战_30(每个子类一张表)
第四种方案是把继承关系表示为相关的外键关联。声明持久化属性的每个类/子类(包括抽象类甚至接口)都有它自己的表。不同于我们最先映射的每个具体类一张表的策略,此处的表仅仅包含了每个非继承的属性(由子类本身声明的每个属性)以及也是超类表的外键的主键的列。这一策略的主要好处在于,SQL Schema被标准化了。Schema演变和完整性约束定义很简单。对一个特定子类的多态关联可能被表示为引用这个原创 2014-03-27 23:15:46 · 896 阅读 · 0 评论 -
Hibernate实战_笔记29(每个类层次结构一张表)
整个类层次结构可以被映射到单张表。这张表把所有类的所有属性的列都包括在层次结构中。由特定行表示的具体子类通过一个类型辨别标志列的值进行识别。这个映射策略在性能和简单性方面都胜出一筹。它是表示多态的最佳方法——多态和非多态的查询都执行得很好——并且更易于手工实现。不用复杂的联结或者联合也有可能生成特殊的报表。有一个重大的问题:子类声明的属性的列必须声明为可为空。如果每个子类都定义几个可为空的原创 2014-03-27 23:11:10 · 989 阅读 · 0 评论 -
Hibernate实战_笔记28(每个带有联合的具体类一张表)
每个带有联合的具体类一张表使用继承策略 你可能注意到了,这种策略的第一个好处是超类(或者接口)属性的共享声明。你不再非得给所有具体的类复制这些映射了——Hibernate会替你完成。记住,SQL模式仍然不知道继承;实际上,我们已经把两个不相关的表映射到了一个更富有表现力的类结构。在JPA注解中,这个策略原创 2014-03-27 23:06:50 · 958 阅读 · 0 评论 -
Hibernate实战_笔记27(每个带有隐式多态的具体类一张表)
表示一个继承层次结构有4种不同的方法:1)每个带有隐式多态的具体类一张表——使用非显式的继承映射和默认的运行时多态行为。2)每个具体类一张——完全放弃来自SQL模式的多态和继承关系。3)每个类层次结构一张表——通过的反规范化SQL模式启用多态,并利用保存类型信息的一个类型辨别标志列。4)每个子类一张表——把is a(继承)关系表示为has a(外键)关系。每个带有隐式多态的具体原创 2014-03-27 23:02:48 · 1337 阅读 · 0 评论 -
Hibernate实战_笔记26(映射组件)
映射组件 目前为止,对象模型的类已经全部成为实体类,每一个都有自己的生命周期和同一性。然而,User类与Address类有着一种特殊的关联。 从对象建模的角度来看,这个关联是一种聚集——是整体一部分(part-of)的关系。聚集是一种强健的关联形式;它对于对象的生命周期有一些额外的语义。在这种情况下,我们有一种更强健的形式:复合(composition),在这里部分的生原创 2014-03-17 15:36:18 · 802 阅读 · 0 评论 -
Hibernate实战_笔记25(细粒度的模型和映射)
细粒度的模型和映射JDK带来的值类型的类(例如String或者基本类型),以及由应用程序的开发员定义的值类型的类(例如Address和MontaryAmount)。首先,映射使用JDK类型的持久化类属性,并学习基础的映射元素和属性。然后着手定制的值类型类,并把它们映射为可嵌入的组件。映射基础属性如果映射持久化类,无论它是实体还是值类型,所有持久化属性都必须在XML映射文件中被显式地原创 2014-03-17 14:43:58 · 1327 阅读 · 0 评论 -
Hibernate实战_笔记19(实现映射之XDoclet)
使用XDocletXDoclet项目给Java带来了面向属性的编程概念。XDoclet利用Javadoc标签格式(@attribute)来指定类、字段,或者方法级的元数据属性。XDoclet被实现为生成Hibernate XML元数据(或者其他东西,取决于插件)的一个Ant目标,作为构建过程的一部分。用XDoclet创建Hibernate XML映射文档很简单;不用手工编写,而是用定制的J原创 2014-03-14 11:25:59 · 886 阅读 · 0 评论 -
Hibernate实战_笔记5(Hibernate、EJB3、JPA)
Hibernate、EJB3和JPA简介在用Hibernate开始第一个项目之前,应该考虑EJB3.0标准和它的子规范Java Persistence。让我们回顾历史看看这个新标准是如何产生的。许多Java开发人员认为EJB2.1实体bean是持久层实现的技术之五。EJB编程和持久化模型在行业中已经被广泛采用,并且已经成了J2EE成功的一个重要因素。Hibernate和EJB3之间的关原创 2014-03-06 23:48:20 · 1084 阅读 · 0 评论 -
Hibernate实战_笔记12(JPA内嵌EJB)
在上一扁已经安装EJB容器,接下来,需要改变之前应用程序的持久化单元配置,来访问一个托管的JTA数据源。先看一下JPA引入EJB组件之后项目的结构:1、配置持久化单元<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan原创 2014-03-10 14:27:42 · 1148 阅读 · 0 评论 -
@注解_唯一约束
直接上代码咯package cn.jbit.test2.bean;import java.io.Serializable;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.I原创 2014-02-28 19:41:26 · 2473 阅读 · 2 评论 -
@注解_复合主键
直接上代码咯package cn.jbit.test2.bean;import java.io.Serializable;import javax.persistence.Embeddable;@Embeddablepublic class UserId implements Serializable { private static final long serialVer原创 2014-02-28 19:51:18 · 2894 阅读 · 0 评论 -
Hibernate 中的悲观锁和乐观锁
悲观锁和乐观锁用于处理数据的并发访问。Hibernate中有一种特殊的属性,即版本(Version)属性。版本属性不参与业务逻辑,只用来保证不会有两个线程同时对数据进行写操作。版本属性是乐观锁的一种实现方式。乐观锁是相对于悲观锁而言的,悲观锁与乐观锁都是保证数据准确性的机制。什么是悲观锁 悲观锁假定其他用户企图访问或者改变正在访问、更改的对象的概率是很高的,因原创 2014-02-26 11:56:10 · 832 阅读 · 0 评论 -
@注解_单向一对多映射
直接上代码咯package cn.jbit.test2.bean;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persiste原创 2014-02-28 19:44:31 · 1278 阅读 · 0 评论 -
@注解_subselect
直接上代码咯说明:subselect(可选):它将一个不可变(immutable)并且只读的实体映射到一个数据库的子查询中。当你想用视图代替一张基本表的时候,这是有用的,但最好不要这样做。若指明的持久化类实际上是一个接口,这也是完全可以接受的。之后你可以用元素 来指定该接口的实际实现类。你可以持久化任何 static(静态的)内部类。你应该使用标准的类名格式来指定类名,比如:Foo$原创 2014-02-28 19:47:19 · 3862 阅读 · 0 评论 -
Hibernate的缓存机制
Hibernate中提供了两级缓存,分别是一级缓存和二级缓存,第一级别的缓存是session级别的缓存,它是属于事务范围的缓存,这一级别的缓存由Hibernate管理,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存,又可以分为内置缓存和外置缓存,这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。一级缓存和二级原创 2014-02-26 19:56:21 · 740 阅读 · 0 评论 -
Hibernate的回调机制
在某些情况下,需要对实体的增删改查操作进行捕获并执行一些操作,这可以通过数据库触发器来实现,触发器的执行对Hibernate Session是透明的,因此会带来很多问题。为了解决这一问题,Hibernate提供了一些专门用于捕获监听实体CURD操作的接口,通过这些接口可以实现类似触发器的功能,能够在实体发生增删改查操作时捕获事件,并且执行相应的动作逻辑。在Hibernate中,这些接口是Lifec原创 2014-02-26 20:04:53 · 938 阅读 · 0 评论 -
@注解_双向一对多映射
直接上代码咯package cn.jbit.test2.bean;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persis原创 2014-02-28 19:35:38 · 828 阅读 · 0 评论 -
Hibernate实战_笔记14(反向工程)
反向工程遗留数据库 当映射遗留数据库时,第一步可能涉及一个自动的反向工程过程。毕竟,实体Schema已经存在于你的数据库系统中。为了使这项工作更容易些,Hibernate配有一组工具,可以从这个元数据(包括XML映射文件和Java源代码)中读取Schema,并生成各种需要创建的东西。所有这些都是基于模板的,因此许多定制工作成了可能。我们将首先介绍如何编写一个可以把现有的数据库加载原创 2014-03-10 19:01:23 · 1247 阅读 · 0 评论 -
Hibernate实战_笔记15(JavaEE服务JTA、JNDI、JMX整合)
与Java EE服务整合 假设你已经试过了前面介绍过的示例,并且熟悉基础的Hibernate配置,以及Hibernate如何与简单的Java应用程序整合。现在,我们要讨论更高级的原生的Hibernate配置选项,以及一般的Hibernate应用程序如何使用Java EE应用程序服务器提供的Java EE服务。 Java EE应用程序服务器,例如JBoss AS、BEA原创 2014-03-10 22:32:03 · 1495 阅读 · 0 评论 -
Hibernate实战_笔记16(分析领域模型)
先声明一下,因为书中所举例子都是简短了代码,一步一步的,并不是一呵而成的,所以大家不要着急。分析业务领域软件开发的工作从问题领域的分析开始(假设没有已经存在的遗留代码或者遗留数据库)。在这个阶段,你在问题领域专家的帮助下,辨别与软件系统有关的主要实体。实体通常是为系统用户所理解的概念:付款、客户、货品、出价等。领域模型分析和设计的目标是,为应用程序捕捉业务信息的本质。开发人员和架构原创 2014-03-12 21:12:40 · 1083 阅读 · 0 评论 -
Hibernate实战_笔记17(持久化实体类)
编写POJO和持久化实体类 Hibernate与用POJO实现的领域模型合作得最好。Hibernate强加给领域模型实现的少数必备条件,对于POJO实现也是最佳实践,因此大部分POJO不用任何改变就可以与Hibernate兼容。Hibernate的必备条件几乎与EJB3.0实体类的相同,因此POJO实现可以轻松地用注解标识,并创造一个EJB3.0兼容的实体。 POJO声原创 2014-03-12 21:25:18 · 1326 阅读 · 0 评论 -
Hibernate实战_笔记10
使用Hibernate EntityManagerHibernate EntityManager是围绕提供JPA编程接口的Hibernate Core的一个包装,支持JPA实体实例的生命周期,并允许你用标准的Java Persistence查询语言编写查询。由于JPA功能是Hibernate原生能力的一个子集。你给Hibernate EntityManager配置了项目,马上就会看到一种特殊的原创 2014-03-08 13:27:10 · 1575 阅读 · 0 评论 -
Hibernate实战_笔记8(Ant设置Schema导出)
导出数据库Schema可以用CREATE语句手工编写SQL DDL,并在数据库中执行这个DDL,来创建数据库Schema。或者(且这是更方便的做法)可以让Hibernate完成这项工作,并给你的应用程序创建一个默认的Schema。用来生成模式的工具是hbm2ddl;它的类是org.hibernate.tool.hbm2ddl.SchemaExport,因此它有时也称作SchemaExpor原创 2014-03-07 16:25:23 · 1150 阅读 · 0 评论 -
Hibernate实战_笔记1(Hibernate基础理论)
什么是持久化几乎所有的应用程序都需要持久化数据。持久化在应用程序开发中是基本概念之一。如果一个信息系统在断电时没有保存数据,这个系统就没有什么实用价值了。关系数据库关系技术是个已知数,仅此一点就成为许多组织选择它的一个充分理由。关系数据库可以有效保证和保护数据的完整性,这是它众多的优良特性之一。关系数据库管理系统既不特定于Java,也不是一种特定于某个特殊应用程序的关系数据库。这个原创 2014-03-06 15:48:55 · 1176 阅读 · 0 评论 -
Hibernate实战_笔记7(Ant)
运行和测试应用程序Hibernate实战中的项目,并没有使用IDE,要运行应用程序,首先要对它进行编译,并通过正确的数据库Schema启动数据库管理系统。Ant是Java的一个强大的构建系统。一般要给项目编写build.xml文件,并用Ant命令行工具调用你在这个文件中定义的构建任务。如果支持的话,也可以从Java IDE中调用Ant任务。之前从没有接触过Ant概念,于是在网上查了一些原创 2014-03-07 14:48:29 · 919 阅读 · 0 评论