`
mazhiyuan
  • 浏览: 64720 次
  • 性别: 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: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。

分享到:
评论

相关推荐

    hibernate-commons-annotations-5.0.1.Final.jar

    此外,`services`子目录下可能包含`javax.persistence.spi.PersistenceProvider`等服务配置文件,指示了Hibernate Commons Annotations作为JPA提供者的注册信息。 三、org目录 `org`目录下包含了HCA的主要代码实现...

    学习hibernate必看ppt--总结的很全面

    【标题】:“学习hibernate必看ppt--总结的很全面” 这个标题表明这是一个关于Hibernate框架的综合学习资料,特别适合初学者或者需要深入理解Hibernate的开发者。它可能包含了一系列PPT,旨在全面概述Hibernate的...

    hibernate-jpa-2.1-api-1.0.0.Final.jar

    对于API库,`META-INF`还可能包含服务配置文件(如services.jar),定义了哪些类实现了特定接口,这对于依赖注入和服务发现至关重要。 `javax`目录则包含了JPA 2.1规范中的核心接口和类。例如,`javax.persistence....

    Hibernate hibernate-core-1a8aca9.ta

    学习Hibernate,首先要掌握Java基础和基本的SQL知识,然后深入理解Hibernate的配置文件,如hibernate.cfg.xml,学会配置数据库连接、实体类映射等。接着,通过实践操作,了解Session、Transaction的使用,以及Query...

    hibernate学习总结文档

    配置 Hibernate 包括设置主配置文件(hibernate.cfg.xml),其中包含了数据库连接信息,如 URL、用户名、密码以及驱动类名。 **实体类与映射文件** 在 Hibernate 中,Java 类代表数据库中的表,类的属性对应于表的...

    hibernate-memcached-1.1.0-sources.zip

    在整合过程中,我们首先需要在Hibernate配置文件中添加Memcached缓存插件的配置,包括Memcached服务器的地址、端口以及缓存策略等信息。接着,我们需要在实体类或者会话工厂中指定使用Memcached作为二级缓存。在代码...

    hibernate总结--云图智联

    首先,Hibernate可以作为模型层/数据访问层(DAO)在基于MVC设计模式的Java Web应用中,它通过配置文件和映射文件将Java对象映射到数据库表,并通过操作持久化对象(PO)来执行对数据库的操作,从而实现数据的增删改...

    最新 hibernate-release-4.2.13.Final.tgz

    "hibernate-release-4.2.13.Final.tgz"是一个全面的Hibernate学习资源,不仅提供了运行环境所需的jar包,还包含了丰富的实践示例和详尽的文档。无论你是初学者还是经验丰富的开发者,都可以从中受益,进一步提升在...

    hibernate-distribution-3.5.6-Final.rar

    在实际开发中,我们需要结合"hibernate-distribution-3.5.6-Final"中的配置文件(如hibernate.cfg.xml)来设置数据库连接信息,并在实体类中定义与数据库表对应的字段。通过SessionFactory的实例,我们可以创建...

    J2EE系统之-hibernate学习总结

    ### J2EE系统之-hibernate学习总结 #### 对象持久化理论 - **对象持久化定义**:将对象中的数据转换存储至外部持久性存储设备的过程,如数据库、磁盘等。 - **对象持久化的原因**: - 内存易失性:断电后数据丢失...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    hibernate学习5之one-to-many双向关联.docx

    总结来说,双向一对多关联映射是Hibernate中处理多对一关系的重要方法。通过在"多"一端设置`inverse="true"`,可以有效地优化数据持久化过程,提高系统性能。在编程中,需要根据业务需求正确地处理关联关系的增删改...

    Middlegen-Hibernate-r5

    在Middlegen-Hibernate-r5中,Middlegen的作用在于根据数据库中的表结构生成Hibernate所需的配置文件,如hibernate.cfg.xml和.hbm.xml文件。这些文件定义了数据库表与Java实体类的映射关系,使得Hibernate能够自动...

    hibernate入门课件--introduce hibernate.pdf

    ### Hibernate入门知识点详解 #### 一、概述 在IT领域,特别是软件开发中,数据库与对象之间的交互一直是项目...对于任何希望提高其Java应用持久层性能和可维护性的开发者来说,学习和掌握Hibernate都是非常必要的。

    Struts2+spring2+hibernate3实例源码-java源码

    - **hibernate.cfg.xml**:Hibernate的核心配置文件,配置了数据库连接信息和映射文件路径。 ```xml &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    而Hibernate Annotations则是Hibernate框架的重要组成部分,它使得我们可以在实体类上直接使用注解进行对象关系映射,避免了XML配置文件的繁琐。本文将深入探讨Hibernate 3.3.2和Hibernate Annotations 3.4.0的核心...

    hibernate-orm-3.3源码

    总结,通过分析《hibernate-orm-3.3源码》,我们可以深入理解 Hibernate 的工作机制,掌握如何高效地使用 ORM 技术,以及如何根据需求扩展和定制 Hibernate。对于任何想提升数据库操作效率和代码可维护性的 Java ...

    hibernate-release-5.0.11.Final

    3. Configuration:配置文件(hibernate.cfg.xml)定义了数据库连接信息、实体类映射等,是Hibernate初始化的重要部分。 4. Mapping文件:每个Java实体类对应一个.hbm.xml文件,描述了类与表之间的映射关系,包括...

    hibernate-distribution-3.6.10.Final-dist.zip

    3. 实例化SessionFactory:通过Configuration类加载配置文件,生成SessionFactory实例,它是线程安全的,整个应用只需要一个。 4. 数据操作:通过Session实例进行增删查改操作,使用Transaction管理事务。 四、...

Global site tag (gtag.js) - Google Analytics