Hibernate 配置文件详解

 
<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


6                           JAVA大对象类型的Hibernate映射类型
   映射类型             java类型                 标准SQL类型           MYSQL类型           ORALCE类型
   binary                byte[]                 VARBINARY(或BLOB)      BLOB                  BLOB
   text                  string                 CLOB                   TEXT                  CLOB
   serializable          实现Serializable       VARBINARY(或BLOB)      BLOB                  BLOB
                         接口任意一个java类
   clob                  java.sql.Clob          CLOB                   TEXT                  CLOB           
   blob                  java.sql.Blob          BLOB                   BLOB                  BLOB
   例:
a Session session=sessionFactory.openSession();
   Transaction tx=session.beginTransaction();
   Object obj=new Object();
   obj.setFile(Hibernate.createClob(" "));
   session.save(obj);
   session.flush();
   //锁定这条纪录
   session.refresh(obj,LocakMode.UPGRADE);
   oracle.sql.CLOB clob=(oracle.sql.CLOB)obj.getFile();
   //把长文本数据放入Clob中
   Writer pw=clob.getCharacterOutputStream();
   pw.write(longText);//longText标识长度超过255的字符串
   pw.close();
   tx.commit();
   session.close();

b InputStream in=this.getClass().getResourceAsStream("photo.gif");
   byte[] buffer=new byte[in.available()];
   in.read(buffer);
   set

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值