天天看点

Hibernate配置文件详解(1)

<meta>元素的属性

        属性                                                描述

    class-description                            指定描述类的javaDoc

    field-description                            指定描述类的属性javaDoc

    interface                                    如果为true,表明生成接口而非类,默认false

    implements                                   指定类所实现的接口

    extends                                      指定继承的父类名

    generated-class                              重新指定生成的类名

    scope-class                                  指定类的修饰符,默认public

    scope-set                                    指定set方法的修饰符,默认public

    scope-get                                    指定get方法的修饰符,默认public

    scope-field                                  指定类的属性的修饰符,默认private

    use-in-toString                              如果为true,表示在toString()方法中包含此属性

    gen-property                                 如果为false,不会在java类中生成此属性,默认true

    finder-method                                指定find方法名

<column>元素属性

    name                 设定字段名字

    length               设定字段长度

    not-null             如为true,指名该字段不允许为null,默认false

    unique               如为true,指名该字段具有唯一约束,默认false

    index                给一个或多个字段建立索引

    unique-key           为多个字段设定唯一约束

    foreign-key          为外键约束命名,在<many-to-many><one-to-one><key><many-to-one>元素中包含

                         foreign-key属性,在双向关联中,inverse属性为true的一端不能设置foreign-key

    sql-type             设定字段sql类型

    check                设定sql检查约束

用于控制insert or update 语句的映射属性

<property>元素的insert属性                  如为false,在insert中不包含该字段,默认为true

<property>元素的update属性                  如为false,在update中不包含该字段,默认为true

<class>元素的mutable属性                    如为false,等价于所有字段的update属性为false,默认为true

<property>元素的dunameic-insert属性         如为true,表明动态生成insert语句,只有不为null,才会包含insert语句中,默认false

<property>元素的dunameic-update属性         如为true,表明动态生成update语句,只有不为null,才会包含insert语句中,默认false

<class>元素的dunameic-insert属性            如为true,表明等价于所有字段动态生成insert语句,只有不为null,才会包含insert语句中                                               ,默认false

<class>元素的dunameic-update属性            如为true,表明等价于所有字段动态生成update语句,只有不为null,才会包含insert语句中                             ,默认false

Hibernate提供的内置标识符生成器

    increment       适用于代理主键,自动递增,增1(只能是long,int,short)

    identity        适用于代理主键,底层数据库自动增长字段类型(数据库需支持,只能是long,int,short)

(oralce)sequence    适用于代理主键,根据底层数据库的序列来生成标识符(数据库支持序列,只能是long,int,short)

    hilo            适用于代理主键,根据high/low算法来生成.Hibernate把特定表的字段作为high值,在默认情况下选用hibernate_unique_key表的next_hi字段

(mysql,mssql)native 适用于代理主键,根据数据库自动生成标识符支持能力,来选择identity,sequence,hilo

    uuid.hex        适用于代理主键,采用128位UUID(universal unique identification)算法来生成标识.此算法能在网络环境中生成唯一的字符串标识符,

                   (不建议使用,字符串类型比整形类型的主键占用更多的空间)

    assigned        适用于自然主键,由java程序负责生成.

<hibernate-mapping>

<class name="项目路径" table="库中对应表名" schema="dbo" catalog="netoa">

      <meta attribute="class-description">指定描述类的javaDoc</meta>

      <meta attribute="class-scope">指名类的修饰类型</meta>

      <meta attribute="extends">指定继承类</meta>

         <id name="bgrkbh" type="long">

            <column name="BGRKBH" precision="15" scale="0" sql-type="库中类型" check="BGRKBH>10"/>

            <meta attribute="scope-set">指定类,类属性的getxxx(),setxxx()方法的修饰符

             包括:static,final,abstract,public,protected,private

            </meta>

            <generator class="assigned" />

        </id>

         <property name="Class.fileName" type="long">

                <column name="YSLX" precision="精度" scale="刻度" not-null="默认false" sql-type="数据库中类型"/>

                附加属性不会影响Hibernate的运行行为

                <meta attribute="field-description">指定描述类的javaDoc</meta>

                指定描述类属性的javaDoc

         </property>

</class>

</hibernate-mapping>

注意:

1 Session的commit()和flush()方法的区别,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;

commit()方法会先调用flush(),然后提交事务.提交事务意味着对数据库所作的更新被永久保存下来.

2 Session的setFlushMode()方法用于设定清理缓存的时间点.FlushMode类定义了三种不同的清理模式

清理缓存的模式        Session的查询方法                Session的commit()方法       Session的flush()方法

FlushMode.AUTO           清理                                  清理                                   清理  

FlushMode.COMMIT         不清理                             清理                                 清理  

FlushMode.NEVER          不清理                             不清理                               清理

3 Hibernate应用中java对象的状态

临时状态 (transient):刚刚用new语句创建,还没被持久化,不处与Session的缓存中,处于临时状态的java对象被称为临时对象.

持久化状态(persistent):已经被持久化,加入session的缓存中.处于持久化状态的java对象被称为持久化对象.

游离状态(detached):已经被持久化,但不在处于session的缓存中.处于游离状态的java对象被称为游离对象.

(注意:::::)持久化类与持久化对象是不同的概念.持久化类的实例可以处于临时状态,持久化状态和游离状态.其中处于

           持久化状态的实例 被称为持久化状态.

临时对象的特性:

1 不处于缓存中,也可以说,不被任何一个Session实例关联

2 在数据中没有对应的纪录.

在此情况下,java对象进入临时状态

1 当通过new创建一个对象时,此时不和数据库中的任何纪录的

ex:对象的状态转化过程

程序代码                                                            对象的生命周期               对象的状态

tx=session.beginTransaction();

Object obj=new Object("tow",new HashSet());      开始生命周期                临时状态

session.save(obj);                                                  处于生命周期              转化为持久状态

Long id=obj.getId();

obj=null;

Object obj2=(Object)session.load(Object.class,id); 处于生命周期             处于持久化状态

tx.commit();                                                         

session.close();                                                    处于生命周期              转变成游离状态

System.out.print(obj2.getName());                         处于生命周期               处于游离状态

obj2=null;                                                              结束生命周期               结束生命周期

4 cascade属性

    cascade属性值                                             描述

     none                                    在保存更新时,忽略其他关联对象,他是cascade默认属性

     save-update                             当通过Session的save(),update()以及saveOrUpdate()方法来保存

                                             或更新当前对象时,及联保存所有关联的新建的临时对象,并且及联更新所有关联的游离对象

     delete                                  当通过session的delete()方法删除当前对象时,及联删除所有对象

     all                                     包含save-update及delete行为,此外对当前对象执行evict()或lock

                                             ()操作时,也会对所有关联的持久化对象执行evict()或lock()操作

     delete-orphan                           删除所有和当前对象解除关联关系的对象

     all-delete-orphan                       包含all和delete-orphan

5    Hibernate映射类型,对应的java基本类型及对应的标准SQL类型

      Hibernate 映射类型               java类型                     标准SQL类型

       integer或者int                  int                                INTEGER

       long                            long                                  BIGINT

       short                           short                               SMALLINT

       byte                            byte                                TINYINT

       float                           float                                   FLOAT

       double                          double                              DOUBLE

       big_decimal                     java.math.BigDecimal         NUMERIC

       character                       char and string              CHAR

       string                          string                                VARCHAR

       boolean                         boolean                       BIT

     Hibernate映射类型,对应的java时间和日期类型及对应的标准SQL类型

     映射类型           java类型                          标准SQL类型             描述

      date       java.util.Date或者java.sql.Date        DATE         代表日期,YYYY-MM-DD

      time       java.util.Date或者java.sql.Date        TIME         代表时间,形式为HH:MM:SS

      timestamp java.util.Date或者java.sql.Timestamp   TIMESTAMP    代表日期和时间,YYYYMMDDHHMMSS

      calendar   java.util.Calendar                     TIMESTAMP    同上

   calendar_date java.util.Calendar                     DATE         代表日期,YYYY-MM-DD