- 浏览: 64286 次
- 性别:
- 来自: 北京
最新评论
-
wucaifang819787:
你好!麻烦问下不知道哪个图片行不行的:http://dl.it ...
struts2源码浅析(四) -
ChenXzh:
高手,佩服得五体投地
关于struts2报There is no Action mapped for namespace / and action name xxx_xxx
如果不希望使用默认的hibernate.cfg.xml 文件作为配置文件,我们也可以指定配置文件名:
select-before-update (可选,默认值为false): 指定Hibernate除非确定对象的确被修改了,不会执行SQL UPDATE操作。在特定场合(实际上,只会发生在一个临时对象关联到一个新的session中去,执行update()的时候),这说明Hibernate会在UPDATE之前执行一次额外的SQL SELECT操作,来决定是否应该进行UPDATE。
使用select-before-update通常会降低性能.当是在防止数据库不必要的触发update触发器,这就很有用了。
(11) where (可选) 指定一个附加的SQLWHERE 条件,在抓取这个类的对象时会一直增加这个条件。
(15) lazy(延迟) (可选): 假若设置 lazy="true",就是设置这个类自己的名字作为proxy接口的一种等价快捷形式。
polymorphism(多形,多态) (可选, 默认值为 implicit (隐式)): 界定是隐式还是显式的使用查询多态。
Implicit (隐式)的多态是指,如果查询中给出的是任何超类、该类实现的接口或者该类的名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。 Explicit (显式)的多态是指,只有在查询中给出的明确是该类的名字时才会返回这个类的实例;同时只有当在这个<class>的定义中作为<subclass>或者<joined-subclass>出现的子类,才会可能返回。 大多数情况下,默认的polymorphism="implicit"都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。(允许一个“轻型”的类,只包含部分表字段)。
如果 name属性不存在,会认为这个类没有标识属性。
unsaved-value 属性很重要!如果你的类的标识属性不是默认为null的,你应该指定正确的默认值。
生成器:
increment (递增)
用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。
不同于mysql数据库的自增长。这个increment是hibernate内部用一个计数器进行累加,不过累加有限,会出现重复,不适用于集群。
identity
指自增长的主键生成方式。对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long, short 或者int类型的。
sequence (序列)
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
hilo (高低位)
使用一个高/低位算法来高效的生成long, short或者 int类型的标识符。给定一个表和字段(默认分别是是hibernate_unique_key 和next)作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在使用JTA获得的连接或者用户自行提供的连接中,不要使用这种生成器。
主键有两部分组成。高位是通过从数据库获得。在数据库中有个表用来维护高位值。
表hibernate_unique_key:
+---------+
| next_hi|
+---------+
| 0 |
+---------+
低位是hibernate内部在累加。
seqhilo(使用序列的高低位)
使用一个高/低位算法来高效的生成long, short或者 int类型的标识符,给定一个数据库序列(sequence)的名字。
uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。 a
uuid.string
使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中
与高低位相比,不需要访问数据库获得主键,可以由hibernate在内部生成,而且保证任意两张表的主键唯一性。在插入时不需要访问数据库,插入的性能较高,使用插入频繁的情况。而且这种方式的可移植性较好,因为它和数据库没有关系,不受数据的约束。但是它按照主键查询时,由于是字符串,效率不如整型的高。
native(本地)
根据底层数据库的能力选择identity, sequence 或者hilo中的一个。 数据库,对于mysql会选择使用identity,对于oracle会选择使用sequence。如果这两种都不支持,则使用高低位。
foreign(外部引用)
使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。
识别器(discriminator)
在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的,它声明了表的识别器字段。识别器字段包含标志值,用于告知持久化层应该为某个特定的行创建哪一个子类的实例。只能使用如下受到限制的一些类型: string, character, integer, byte, short, boolean, yes_no, true_false.
typename可以是如下几种:
Hibernate基础类型之一(比如:integer, string, character,date, timestamp, float, binary, serializable, object, blob)。
一个Java类的名字,这个类属于一种默认基础类型 (比如: int, float,char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob)。
一个PersistentEnum的子类的名字。(比如:. eg.Color)。
一个可以序列化的Java类的名字。
一个自定义类型的类的名字。(比如: com.illflow.type.MyCustomType)。
如果你没有指定类型,Hibernarte会使用 反射 来得到这个名字的属性,以此来猜测正确的Hibernate类型。Hibernate会对属性读取器(getter方法)的返回类进行解释,按照规则2,3,4的顺序。然而,这并不足够。 在某些情况下你仍然需要type属性。 (比如,为了区别Hibernate.DATE和Hibernate.TIMESTAMP,或者为了指定一个自定义类型。)
access属性用来让你控制Hibernate如何在运行时访问属性。在默认情况下,Hibernate会使用属性的get/set方法对。如果你指明access="field",Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。你也可以指定你自己的策略,这就需要你自己实现net.sf.hibernate.property.PropertyAccessor接口,再在access中设置你自定义策略类的名字。
property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。
File file = new File("C:\\myhibernate.xml"); Configuration config = new Configuration().configure(file);
Xml代码 <class name="ClassName" table="tableName" discriminator-value="discriminator_value" mutable="true|false" schema="owner" proxy="ProxyInterface" dynamic-update="true|false" dynamic-insert="true|false" select-before-update="true|false" polymorphism="implicit|explicit" where="arbitrary sql where condition" (11) persister="PersisterClass" (12) batch-size="N" (13) optimistic-lock="none|version|dirty|all" (14) lazy="true|false" (15) />
select-before-update (可选,默认值为false): 指定Hibernate除非确定对象的确被修改了,不会执行SQL UPDATE操作。在特定场合(实际上,只会发生在一个临时对象关联到一个新的session中去,执行update()的时候),这说明Hibernate会在UPDATE之前执行一次额外的SQL SELECT操作,来决定是否应该进行UPDATE。
使用select-before-update通常会降低性能.当是在防止数据库不必要的触发update触发器,这就很有用了。
(11) where (可选) 指定一个附加的SQLWHERE 条件,在抓取这个类的对象时会一直增加这个条件。
(15) lazy(延迟) (可选): 假若设置 lazy="true",就是设置这个类自己的名字作为proxy接口的一种等价快捷形式。
polymorphism(多形,多态) (可选, 默认值为 implicit (隐式)): 界定是隐式还是显式的使用查询多态。
Implicit (隐式)的多态是指,如果查询中给出的是任何超类、该类实现的接口或者该类的名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。 Explicit (显式)的多态是指,只有在查询中给出的明确是该类的名字时才会返回这个类的实例;同时只有当在这个<class>的定义中作为<subclass>或者<joined-subclass>出现的子类,才会可能返回。 大多数情况下,默认的polymorphism="implicit"都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。(允许一个“轻型”的类,只包含部分表字段)。
<id name="propertyName" type="typename" column="column_name" unsaved-value="any|none|null|id_value" access="field|property|ClassName"> <generator class="generatorClass"/> </id> <id name="propertyName" type="typename" column="column_name" unsaved-value="any|none|null|id_value" access="field|property|ClassName"> <generator class="generatorClass"/> </id>
如果 name属性不存在,会认为这个类没有标识属性。
unsaved-value 属性很重要!如果你的类的标识属性不是默认为null的,你应该指定正确的默认值。
生成器:
increment (递增)
用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。
不同于mysql数据库的自增长。这个increment是hibernate内部用一个计数器进行累加,不过累加有限,会出现重复,不适用于集群。
identity
指自增长的主键生成方式。对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long, short 或者int类型的。
sequence (序列)
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
hilo (高低位)
使用一个高/低位算法来高效的生成long, short或者 int类型的标识符。给定一个表和字段(默认分别是是hibernate_unique_key 和next)作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在使用JTA获得的连接或者用户自行提供的连接中,不要使用这种生成器。
主键有两部分组成。高位是通过从数据库获得。在数据库中有个表用来维护高位值。
表hibernate_unique_key:
+---------+
| next_hi|
+---------+
| 0 |
+---------+
低位是hibernate内部在累加。
seqhilo(使用序列的高低位)
使用一个高/低位算法来高效的生成long, short或者 int类型的标识符,给定一个数据库序列(sequence)的名字。
uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。 a
uuid.string
使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中
与高低位相比,不需要访问数据库获得主键,可以由hibernate在内部生成,而且保证任意两张表的主键唯一性。在插入时不需要访问数据库,插入的性能较高,使用插入频繁的情况。而且这种方式的可移植性较好,因为它和数据库没有关系,不受数据的约束。但是它按照主键查询时,由于是字符串,效率不如整型的高。
native(本地)
根据底层数据库的能力选择identity, sequence 或者hilo中的一个。 数据库,对于mysql会选择使用identity,对于oracle会选择使用sequence。如果这两种都不支持,则使用高低位。
foreign(外部引用)
使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。
识别器(discriminator)
<discriminator column="discriminator_column" type="discriminator_type" force="true|false" />
在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的,它声明了表的识别器字段。识别器字段包含标志值,用于告知持久化层应该为某个特定的行创建哪一个子类的实例。只能使用如下受到限制的一些类型: string, character, integer, byte, short, boolean, yes_no, true_false.
typename可以是如下几种:
Hibernate基础类型之一(比如:integer, string, character,date, timestamp, float, binary, serializable, object, blob)。
一个Java类的名字,这个类属于一种默认基础类型 (比如: int, float,char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob)。
一个PersistentEnum的子类的名字。(比如:. eg.Color)。
一个可以序列化的Java类的名字。
一个自定义类型的类的名字。(比如: com.illflow.type.MyCustomType)。
如果你没有指定类型,Hibernarte会使用 反射 来得到这个名字的属性,以此来猜测正确的Hibernate类型。Hibernate会对属性读取器(getter方法)的返回类进行解释,按照规则2,3,4的顺序。然而,这并不足够。 在某些情况下你仍然需要type属性。 (比如,为了区别Hibernate.DATE和Hibernate.TIMESTAMP,或者为了指定一个自定义类型。)
access属性用来让你控制Hibernate如何在运行时访问属性。在默认情况下,Hibernate会使用属性的get/set方法对。如果你指明access="field",Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。你也可以指定你自己的策略,这就需要你自己实现net.sf.hibernate.property.PropertyAccessor接口,再在access中设置你自定义策略类的名字。
property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。
发表评论
-
JAVA多线程-厕所问题
2012-11-22 11:55 1985在http://my.oschina.net/xpbug/bl ... -
第八章 最大自序列和
2012-11-01 20:29 900第八章的问题是常见的---最大自序列和 的问题 书中提 ... -
第二章 旋转字符串的思考
2012-10-26 16:09 893编程珠玑第二章旋转字符串,abcdefg向左旋转3位,变为de ... -
Mongdb的upsert出现E11000 duplicate key errors的错误分析
2012-10-25 17:36 9213昨日上线的系统,今天查日志时发现有不少E11000 dupli ... -
开源的Mongodb java client -- mango发布
2012-07-20 21:53 1886Mango ---- 一个非常简单的操作mongodb的 ... -
浅出Apache Cxf
2012-03-05 20:14 0由于业务需要,开放了系统的 Web Se ... -
struts2源码浅析(四)
2011-10-19 17:15 1595接上一篇讲了filter后,现在request到了action ... -
struts2源码浅析(三)
2011-10-19 16:50 1614接上篇http://mazhiyuan.iteye.com/b ... -
struts2源码浅析(二)
2011-10-19 16:34 2279接上一篇http://mazhiyuan.iteye.com/ ... -
struts2源码浅析(一)
2011-10-19 16:18 17861. Struts2架构图 请求首先通过Filter ... -
struts2.1权威指南-笔记
2010-12-19 22:36 11311.struts 1.x 和 struts 2.x的 ... -
Hibernate学习总结4---对象状态
2010-12-10 16:14 995session 的几个主要方法: 1,save方法和persi ... -
Hibernate 学习总结一
2010-12-10 14:54 897引入: 模型不匹配(阻 ... -
HF servlet&jsp 前6章要点总结
2010-11-21 11:58 937今天有时间把前6章主要讲servlet的内容坐下总结。好了,开 ... -
jquery源码分析之属性篇
2010-11-20 20:09 1954jquery提供了一些快捷函 ... -
HF servelt&jsp 定制标记开发 要点总结
2010-11-13 11:41 13361.标记文件使用一个页 ... -
bean相关标准动作总结+复习
2010-11-07 23:22 7961.<jsp:useBean>动作会定义一个变量, ... -
HF servlet&jsp ---include 指令和动作元素
2010-11-07 23:02 8381.include的2种方式 include多用于网站中可重用 ... -
HF servlet&jsp 总结—无脚本的JSP
2010-11-04 18:26 8488无脚本的JSP 8.1在JSP页面使用动作元素 <js ... -
HF servlet&jsp 总结—使用JSP
2010-11-02 17:37 801初看HF系列的servlet&jsp前6章主讲的ser ...
相关推荐
此外,`services`子目录下可能包含`javax.persistence.spi.PersistenceProvider`等服务配置文件,指示了Hibernate Commons Annotations作为JPA提供者的注册信息。 三、org目录 `org`目录下包含了HCA的主要代码实现...
【标题】:“学习hibernate必看ppt--总结的很全面” 这个标题表明这是一个关于Hibernate框架的综合学习资料,特别适合初学者或者需要深入理解Hibernate的开发者。它可能包含了一系列PPT,旨在全面概述Hibernate的...
学习Hibernate,首先要掌握Java基础和基本的SQL知识,然后深入理解Hibernate的配置文件,如hibernate.cfg.xml,学会配置数据库连接、实体类映射等。接着,通过实践操作,了解Session、Transaction的使用,以及Query...
配置 Hibernate 包括设置主配置文件(hibernate.cfg.xml),其中包含了数据库连接信息,如 URL、用户名、密码以及驱动类名。 **实体类与映射文件** 在 Hibernate 中,Java 类代表数据库中的表,类的属性对应于表的...
在整合过程中,我们首先需要在Hibernate配置文件中添加Memcached缓存插件的配置,包括Memcached服务器的地址、端口以及缓存策略等信息。接着,我们需要在实体类或者会话工厂中指定使用Memcached作为二级缓存。在代码...
首先,Hibernate可以作为模型层/数据访问层(DAO)在基于MVC设计模式的Java Web应用中,它通过配置文件和映射文件将Java对象映射到数据库表,并通过操作持久化对象(PO)来执行对数据库的操作,从而实现数据的增删改...
"hibernate-release-4.2.13.Final.tgz"是一个全面的Hibernate学习资源,不仅提供了运行环境所需的jar包,还包含了丰富的实践示例和详尽的文档。无论你是初学者还是经验丰富的开发者,都可以从中受益,进一步提升在...
在实际开发中,我们需要结合"hibernate-distribution-3.5.6-Final"中的配置文件(如hibernate.cfg.xml)来设置数据库连接信息,并在实体类中定义与数据库表对应的字段。通过SessionFactory的实例,我们可以创建...
对于API库,`META-INF`还可能包含服务配置文件(如services.jar),定义了哪些类实现了特定接口,这对于依赖注入和服务发现至关重要。 `javax`目录则包含了JPA 2.1规范中的核心接口和类。例如,`javax.persistence....
### J2EE系统之-hibernate学习总结 #### 对象持久化理论 - **对象持久化定义**:将对象中的数据转换存储至外部持久性存储设备的过程,如数据库、磁盘等。 - **对象持久化的原因**: - 内存易失性:断电后数据丢失...
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...
总结来说,双向一对多关联映射是Hibernate中处理多对一关系的重要方法。通过在"多"一端设置`inverse="true"`,可以有效地优化数据持久化过程,提高系统性能。在编程中,需要根据业务需求正确地处理关联关系的增删改...
在Middlegen-Hibernate-r5中,Middlegen的作用在于根据数据库中的表结构生成Hibernate所需的配置文件,如hibernate.cfg.xml和.hbm.xml文件。这些文件定义了数据库表与Java实体类的映射关系,使得Hibernate能够自动...
### Hibernate入门知识点详解 #### 一、概述 在IT领域,特别是软件开发中,数据库与对象之间的交互一直是项目...对于任何希望提高其Java应用持久层性能和可维护性的开发者来说,学习和掌握Hibernate都是非常必要的。
- **hibernate.cfg.xml**:Hibernate的核心配置文件,配置了数据库连接信息和映射文件路径。 ```xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/...
而Hibernate Annotations则是Hibernate框架的重要组成部分,它使得我们可以在实体类上直接使用注解进行对象关系映射,避免了XML配置文件的繁琐。本文将深入探讨Hibernate 3.3.2和Hibernate Annotations 3.4.0的核心...
总结,通过分析《hibernate-orm-3.3源码》,我们可以深入理解 Hibernate 的工作机制,掌握如何高效地使用 ORM 技术,以及如何根据需求扩展和定制 Hibernate。对于任何想提升数据库操作效率和代码可维护性的 Java ...
3. Configuration:配置文件(hibernate.cfg.xml)定义了数据库连接信息、实体类映射等,是Hibernate初始化的重要部分。 4. Mapping文件:每个Java实体类对应一个.hbm.xml文件,描述了类与表之间的映射关系,包括...
3. 实例化SessionFactory:通过Configuration类加载配置文件,生成SessionFactory实例,它是线程安全的,整个应用只需要一个。 4. 数据操作:通过Session实例进行增删查改操作,使用Transaction管理事务。 四、...