
Hibernate
文章平均质量分 74
chho
这个作者很懒,什么都没留下…
展开
-
unsaved-value的经典解释
当你显式的使用session.save()或者session.update()操作一个对象的时候,实际上是用不到unsaved-value的。某些情况下(父子表关联保存),当你在程序中并没有显式的使用save或者update一个持久对象,那么Hibernate需要判断被操作的对象究竟是一个已经持久化过的持久对象,是一个尚未被持久化过的内存临时对象。例如: java代码:原创 2005-01-05 16:41:00 · 1251 阅读 · 0 评论 -
Hibernate入门28 - 悲观锁定
入门 28 - 悲观锁定 在多个客户端可能读取同一笔数据或同时更新一笔数据的情况下,必须要有访问控制的手段,防止同一个数据被修改而造成混乱,最简单的手段就是对数据进行锁定,在自己进行数据读取或更新等动作时,锁定其它客户端不能对同一笔数据进行任何的动作。 悲观锁定(Pessimistic Locking)一如其名称所示,悲观的认定每次资料存取时,其它的客户端也会存取同一笔数据,因此对该笔数据进原创 2005-01-27 20:52:00 · 1345 阅读 · 0 评论 -
Hibernate入门04 - 提供JDBC连接
入门 04 - 提供JDBC连接 如果需要的话,您可以自行提供JDBC连接对象给Hibernate使用,而无需透过配置文件设定JDBC来源,一个最简单的例子如下: Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/HibernateTest?user=root&passwor原创 2005-01-15 14:33:00 · 2133 阅读 · 0 评论 -
Hibernate入门06 - Query接口
入门 06 - Query接口 除了直接使用find()方法并配合HQL来进行查询之外,我们还可以透过 net.sf.hibernate.Query接口的实例来进行查询,透过Query接口,您可以先设定查询参数,之后透过setXXX()等方法,将指定的参数值填入,而不用每次都撰写完整的HQL,直接来看个例子: Query query = session.createQuery("sele原创 2005-01-15 15:02:00 · 2278 阅读 · 0 评论 -
Hibernate入门08 - 继承映射1
入门 08 - 继承映射1 如果应用程序中的对象有继承的关系,我们可以有三种策略将这种关系映像至数据表上。 最简单的方式就是给每个对象一个表格,如果父类别User中有field1、field2两个属性,其表格USER有FIELD1、FIELD2与之对 应,而子类别SubUser若继承了父类别的field1、field2属性,表格中SUBUSER中也要拥有FIELD1、FIELD2与之对应,这原创 2005-01-15 15:41:00 · 1134 阅读 · 0 评论 -
Hibernate入门09 - 继承映射2
入门 09 - 继承映射2 接续上一个主题,我们来看看继承关系映像的第三种方式,我们给予父类别与每个子类别一个表格,与第一个方法不同的是,父类别映像的表格与子类别映像的表 格共享相同的主键值,父类别表格只记录本身的属性,如果要查询的是子类别,则透过外键参考从父类别表格中取得继承而来的属性数据。 直接以图片说明会比较容易理解,我们使用前一个主题中的User、PowerUser与GuestUse原创 2005-01-15 15:49:00 · 1039 阅读 · 0 评论 -
Hibernate入门11 - Set 映射
入门 11 - Set 映射 这个主题介绍如果在对象中包括集合对象,像是使用HashSet来包括其它对象时,该如何进行对象与数据表的映像,像Set这样的集合,可以包括所有的Java对象,这边先介绍当Set中包括的对象没有实体(Entiy)时的映像方式。 (简单的说,也就是所包括的对象没有对象识别(identity)值,没有数据库层次上的识别值之表格与之对应的对象,只是纯綷的值型态(value原创 2005-01-27 19:53:00 · 1204 阅读 · 0 评论 -
Hibernate入门17 - 实作equals和hashCode
入门 17 - 实作equals和hashCode Hibernate并不保证不同时间所取得的数据对象,其是否参考至内存的同一位置,使用==来比较两个对象的数据是否代表数据库中的同一笔数据是不可行的,而Object预设的equals()本身即比较对象的内存参考,如果您要有必要比较透过查询后两个对象的数据是否相同(例如当对象被储存至 Set时)您必须实作equals()与hashCode()。原创 2005-01-27 20:15:00 · 1905 阅读 · 0 评论 -
Hibernate入门18 - 多对一实体映像
入门 18 - 多对一实体映像 一个实体简单的说就是在数据库中拥有一个表格的对象,并拥有自已的数据库识别(database identity),之前介绍的Component对象并不是实体,它没有自已的数据库识别,具体的话,它没有id属性,Hibernate并不会赋予它id值。 实体与实体之间的关系有:一对一、多对一、一对多、多对多。其中多对一算是最常见的实体关系,举个简单的例子,假设您在撰写一原创 2005-01-27 20:19:00 · 1449 阅读 · 0 评论 -
Hibernate入门20 - cascade持久化
入门 20 - cascade持久化 在Java程序中,对象与对象之间会透过某些关系互相参考,如果有一个对象已经是持久化对象,被它参考的对象直觉上也应该要持久化,以维持对象之间关联的完整性,这是藉由可达性完成持久化(Persistence by reachability)的基本概念。 如果将对象之间的关联想象为一个树形图,从某一个持久化物件为树根出发,父节点若是持久化对象,则被父节点参考到的原创 2005-01-27 20:28:00 · 1408 阅读 · 0 评论 -
Hibernate入门25 - Session 管理
入门 25 - Session 管理 Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取,都与 Session息息相关,就如同在编写JDBC时需关心Connection的管理,以有效的方法创建、利用与回收Connection,以减少资源的消耗,增加系统执行效能一样,有效的Session管理,也是Hibernate应用时需关注的焦点。 Session是由Se原创 2005-01-27 20:45:00 · 1572 阅读 · 0 评论 -
Hibernate入门12 - List 映射
入门 12 - List 映射 这边介绍如果对象中包括List型态的属性时如何进行映像,首先我们假设我们要制作一个在线档案管理,使用者上载的文件名称可能是重复的、具有相同名称,之前使用的Set不允许有重复的内容,所以这次我们改用List,我们的User类别撰写如下: User.javapackage onlyfun.caterpillar; import java.util.原创 2005-01-27 19:56:00 · 1047 阅读 · 0 评论 -
Hibernate入门16 - 对象状态与识别
入门 16 - 对象状态与识别 在之前的主题大致了解Hibernate的基本操作与ORM之后,我们来重新探讨一些Hibernate底层的一些机制,首先从Hibernate的对象状态开始讨论。 Hibernate中的对象可以分为三种状态:暂存(Transient)对象、持久(Persistent)对象、分离(Detached)对象。 暂存对象指的是在Java程序流程中,直接使用new制作出之对原创 2005-01-27 20:12:00 · 2117 阅读 · 2 评论 -
Hibernate入门19 - 一对多实体映像
入门 19 - 一对多实体映像 在前一个主题中,User对Room是多对一,反过来看,Room对User是一对多,一个Room可以给多个User住宿使用,我们的User类别这次设计如下: User.javapackage onlyfun.caterpillar; public class User { private long id; private St原创 2005-01-27 20:24:00 · 1351 阅读 · 0 评论 -
Hibernate入门24 - 延迟初始 Lazy Initialization
入门 24 - 延迟初始 Lazy Initialization 首先我们来看看这个主题:入门 11 - Set 映射 依这个主题所完成的例子,请将Hibernate的show_sql设定为true,当我们使用下面的程序时,观看控制台所使用的SQL: HibernateTest.javaimport onlyfun.caterpillar.*;import net.sf.hibe原创 2005-01-27 20:42:00 · 1371 阅读 · 0 评论 -
Hibernate入门23 - 多对多实体映像
入门 23 - 多对多实体映像 假设现在有User与Server两个类别,一个User可以被授权使用多台Server,而在Server上也记录授权使用它的使用者,就User与Server两者而言即使多对多的关系。 在程序设计时,基本上是不建议直接在User与Server之间建立多对多关系,这会使得User与Server相互依赖,通常会透过一个中介类别来维护两者之间的多对多关系,避免两者的相互原创 2005-01-27 20:39:00 · 1265 阅读 · 0 评论 -
Hibernate入门22 - 一对一实体映像
入门 22 - 一对一实体映像 假设我们之前范例的User与Room是一对一的关系,也就是每一个人分配一个房间,先看看这两个类别: User.javapackage onlyfun.caterpillar; public class User { private long id; private String name; private Room原创 2005-01-27 20:36:00 · 1629 阅读 · 0 评论 -
用ant来执行hibernate所自带sechmaExport的工具
既然在eclipse环境下工作,最好所有相关的工作都能在它里面完成。hibernate自带了一个工具schemaExport,可以让你从map文件产生数据库的ddl。在eclipse project中新建一个目录,schemae,然后新建两个文件。schemae.xml,schema.properties。schema.properties的内容:neededClassPath=c:/hi原创 2005-01-08 11:27:00 · 1255 阅读 · 0 评论 -
Hibernate入门01-Hibernate所需类库
入门 01 - Hibernate所需类别库Hibernate是ORM的解决方案,其底层对数据库的操作依赖于JDBC,所以您必须先取得JDBC驱动程序,在这边我们使用的是MySQL,所以您必须至以下网址先取得MySQL的JDBC驱动程序:JDBC驱动程序 接下来取得Hibernate,在撰写此文的同时,Hibernate最后的稳定版本是2.1.6,而3.0版还在测试阶段,这边的介绍将以2.1原创 2005-01-15 13:51:00 · 1879 阅读 · 0 评论 -
Hibernate入门02 - 第一个Hibernate程序
入门 02 - 第一个Hibernate程序 这边以一个简单的单机程序来示范Hibernate的配置与功能,在这个例子中的一些操作,实际上会使用一些自动化工具来完成,而不一定亲自手动操作设定,这边完全手动的原因,在于让您可以知道Hibernate实际上会作那些动作,在进行范例之前,请先确定前一个主题中的相关jar档案都已经设定在 CLASSPATH中。 我们先作数据库的准备工作,在MySQL原创 2005-01-15 14:03:00 · 1525 阅读 · 0 评论 -
Hibernate入门03 - 配置文件
入门 03 - 配置文件 Hibernate可以使用XML或属性档案来配置SessionFactory,预设的配置文件名称为hibernate.cfg.xml或hibernate.properties。 上一个主题中所示范的为使用XML文件的方式,一个XML文件的例子如下: hibernate.cfg.xml PUBLIC "-//Hibernate/Hibernate原创 2005-01-15 14:26:00 · 1268 阅读 · 0 评论 -
Hibernate入门05 - 基本数据查询
入门 05 - 基本数据查询 使用Hibernate进行数据查询是一件简单的事,Java程序设计人员可以使用对象操作的方式来进行数据查询,查询时使用一种类似SQL的HQL (Hibernate Query Language)来设定查询的条件,与SQL不同的是,HQL是具备对象导向的继承、多型等特性的语言。 直接使用范例来看看如何使用Hibernate进行数据库查询,在这之前,请先照之前介绍过原创 2005-01-15 14:42:00 · 1606 阅读 · 1 评论 -
Hibernate入门07 - 更新,删除数据
入门 07 - 更新,删除数据 如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据,例如: HibernateTest.javaimport onlyfun.caterpillar.*;import net.sf.hibernat原创 2005-01-15 15:31:00 · 1891 阅读 · 0 评论 -
Hibernate入门10 - Component 映射
入门 10 - Component 映射 考虑这么一个对象类别: User.javapackage onlyfun.caterpillar; public class User { private String id; private String name; private char sex; private int age;原创 2005-01-15 15:52:00 · 1171 阅读 · 0 评论 -
Hibernate入门15 - Component的集合映像
入门 15 - Component的集合映像 先前所介绍的集合映像都只使用了String属性表示一个数据库字段的内容,在之前的一个主题中我们看过,我们可以将一个字段的内容映像至一个Component对象:入门 10 - Component 映射如果我们想要将Component对象储存至集合对象中,例如将Email对象储存至HashSet中,在映像时只需要将 标签改为,并指定映像的类别,举个实际原创 2005-01-27 20:10:00 · 1021 阅读 · 0 评论 -
Hibernate入门21 - 双向关联与inverse设定
入门 21 - 双向关联与inverse设定 之前我们对User与Room作了单向的多对一以及反过来的一对多关联,我们也可以让User与Room彼此参考,形成双向关联,就User与Room对象,具体来说,就是将程序如下设计: User.javapackage onlyfun.caterpillar; public class User { private long原创 2005-01-27 20:32:00 · 1575 阅读 · 0 评论 -
Hibernate入门27 - 事务管理
入门 27 - 事务管理 事务是一组原子操作(一组SQL执行)的工作单元,这个工作单元中的所有原子操作在进行期间,与其它事务隔离,免于数据源的交相更新而发生混乱,事务中的所有原子操作,要嘛全部执行成功,要嘛全部失败(即使只有一个失败,所有的原子操作也要全部撤消)。 在JDBC中,可以用Connection来管理事务,可以将Connection的AutoCommit设定为false,在下达一连原创 2005-01-27 20:49:00 · 1588 阅读 · 0 评论 -
Hibernate入门 29 - 乐观锁定
入门 29 - 乐观锁定 悲观锁定假定任何时刻存取数据时,都可能有另一个客户也正在存取同一笔数据,因而对数据采取了数据库层次的锁定状态,在锁定的时间内其它的客户不能对资 料进行存取,对于单机或小系统而言,这并不成问题,然而如果是在网络上的系统,同时间会有许多联机,如果每一次读取数据都造成锁定,其后继的存取就必须等待,这将造成效能上的问题,造成后继使用者的长时间等待。 乐观锁定(optimis原创 2005-01-27 20:53:00 · 1583 阅读 · 0 评论 -
Hibernate入门13 - Map 映射
入门 13 - Map 映射 假设您现在要设计一个在线档案管理,每一个使用者可以上载自己的档案,并为档案加上描述,我们可以使用Map型态对象来记录上传的档案,以档案描述作为键(key),以文件名称作为值(value),我们的User类别设计如下: User.javapackage onlyfun.caterpillar; import java.util.*; publ原创 2005-01-27 20:00:00 · 1015 阅读 · 0 评论 -
Hibernate入门14 - Set与Map的排序
入门 14 - Set与Map的排序 在查询对象的Set或Map成员时,您可以对其进行排序,排序可以在两个层次进行,一个是在Java执行环境中进行,一个是利用数据库本身的排序功能。如果要在Java执行环境中进行排序,可以映像文件中设定sort属性,例如若为Set,则如下设定: 藉由指定sort为natural,Hibernate在加载数据库的原创 2005-01-27 20:03:00 · 1361 阅读 · 0 评论 -
Hibernate入门26 - Criteria 查询
入门 26 - Criteria 查询 Hibernate支持一种符合Java撰写习惯的查询API,使用Session建立一个net.sf.hibernate.Criteria,您可以在不使用SQL甚至HQL的情况下进行对数据库的查询。 我们以之前所练习过的第一个Hibernate程序完成的结果为例:入门 02 - 第一个Hibernate程序 如果要使用Criteria来查询所有的User原创 2005-01-27 20:47:00 · 1664 阅读 · 0 评论