`
mazhiyuan
  • 浏览: 62664 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate学习总结3 --配置文件

阅读更多
如果不希望使用默认的hibernate.cfg.xml 文件作为配置文件,我们也可以指定配置文件名:
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: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。

分享到:
评论

相关推荐

    hibernatezongjie

    hibernate学习总结 Hibernate Hello World 1.建立新的java项目 名为:hibernate_0100_HelloWorld 2. 学习建立User-hibernate 并加入相应的包 a)项目右键build path-configure build path-add library b)选择...

    Hibernate中文详细学习文档

    3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化...

    hibernate配置文件

    该文档总结了hibernate各种关联模式,单向多对一,单向一对多,双向一对多,双向多对多,自身一对多关联,以及oracle,mysql的相关数据库连接配置,希望对您学习有帮助。

    JPA学习笔记-EJB-04JPA关联映射总结

    感觉JPA关联映射实现感觉比Hibernate配置文件的关联映射几乎一样,只是引入了“零配置”这个概念。劣者自己在做一个东西的时候用到了关联映射,在此将它做一个总结。留给自己回顾用。

    在Myeclipse下搭建的SpringMvc+Spring+Hibernate框架

    自己学习搭建的SMSH框架,配置文件中有注释,导入到MyEclipse中看一下就知道了。总结就是贵在实践!希望能对你有帮助。lib中有相关jar包

    Java学习笔记-个人整理的

    {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}{24}{subsubsection.1.4.1.1} {1.4.2}格式化输出浮点数}{24}{...

    xdoclet1 xdoclet1 spring3.0.5、struts1.3、struts2.1、 servlet

    XDoclet可以通过你在java源代码中的一些特殊的注释信息,自动为你生成配置文件、源代码等等,例如web、ejb的部署描述文件、config.xml配置文件、javascript校验等。本资源我在学习xdoclet过程中,总结完成的xoclet...

    Java语言基础下载

    学习目标 1 Java历史 2 Java技术概述 3 Java技术的优点 3 Java虚拟机 4 类加载器 6 Windows环境变量 8 内容总结 13 独立实践 14 第二章: 面向对象概述 15 学习目标 15 面向对象(Object Oriented) 16 面向对象的主要...

    OA系统的毕业设计的毕业论文

    5.2.1 创建并配置Hibernate映射文件 37 5.2.2 开发并配置Hibernate DAO层 38 5.3 控制层Struts实现 38 5.3.1 开发Struts核心流程代码 38 5.3.2 开发JSP页面原型 40 5.3.3 增加表单校验功能 40 5.3.4 调用DAO组件操作...

    mybatis学习笔记

    3 SqlMapConfig.xml配置文件 24 3.1 配置内容 24 3.2 properties(属性) 24 3.3 settings(配置) 25 3.4 typeAliases(类型别名) 26 3.4.1 mybatis支持别名: 26 3.4.2 自定义别名: 27 3.5 typeHandlers(类型...

    java面试题及技巧3

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    收集的常见的专业问题解决办法.rar

    2009-02-24 08:39 1423088 975149 常见的专业问题解决办法\Java中多态变量的讨论和总结.mht 2009-02-24 08:52 156256 34316 常见的专业问题解决办法\Java中的强制类型转换_Believe ┭┮ YourSelf.mht 2009-02-24 08:...

    Maven权威指南 很精典的学习教程,比ANT更好用

    总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或...

    iuhyiuhkjh908u0980

    ant配置文件实例详解 build.xml 代码 xml version="1.0" encoding="UTF-8"?&gt; &lt;!-- name:对应工程的名字;default:需要的缺省任务(运行"ant"不指明任务时执行的任务) --&gt; by duzn 2007-04-02 回复 (0) Antenna与j2me...

    java文集

    SWT可交互式Browser控件 JDK配置(注意) RIA简介(第一部分) 在 Eclipse 中嵌入 NASA World Wind Java SDK, 用3DES加密解密 BadPaddingException Web Service 打包生成aar文件 什么是反射...

    java面试题以及技巧

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题目与技巧1

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题及技巧4

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    java面试题以及技巧6

    │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form...

    ant_junitc测试

    为了督促自己学习,同时也是为了及时总结,并与大家分享,近期准备写一个mybatis学习笔记的系列博文。请有兴趣的朋友多多关注、督促并批评指正!不胜感激! 在拙作《纯手工编写第一个Hibernate程序》和《对“纯...

Global site tag (gtag.js) - Google Analytics