hibernate第四天

来源:互联网 发布:淘宝百信大药房旗舰店 编辑:程序博客网 时间:2024/05/20 11:25

一:
 <set name="集合属性名" cascade="all" inverse="true" lazy="false" fetch="join">
  <key column="外键所在的列名">
  <one-to-many class="">
 </set>
多:
 <many-to-one name="" column="外键所在的列名">

 List<ClassRoom> ls = session.createQuery("from ClassRoom").list();

 

session.get()/load()
 1   outer-join="true" 
     fetch="join"
     lazy="false"
  这三个属性只对上述方法生效
  fetch   outer-join   lazy
------------------------------------------------------------------------------------
  join   ***    ***
   fetch为join,则后续属性全部失效,使用表连接查询
  select    ***    
   fetch=select,如果lazy=true,则使用单条sql只查询单表
         如果lazy=flase,则分别发送多条sql语句查询多个表
  不写    
   fetch不写,如果outer-join=true,则lazy失效,使用表连接查询
       如果outer-join=false,
     lazy=true,则使用单条sql只查询单表
     如果lazy=flase,则分别发送多条sql语句查询多个表
 ============================
 fetch > outer-join >lazy
 ============================

session.createQuery(hql)
 hql语句中表连接,不使用fetch,则查询主表属性
     使用fetch,则将主表及其关联表中的关联属性全部通过一条sql语句查询

 

hibernate主键生成策略:
    oracle    mysql
 sequence
    适用    不适用
  依赖于数据库是否支持序列机制
  要求除了业务表必须创建序列
   <id generator class="sequence"></id>
   + 创建一个名为hibernate_sequence的序列

   <id generator class="sequence">
    <param name="sequence">自定义的序列名</param>
   </id>
   + 创建自定义序列
   
 increment
    适用    适用
  不需要指定额外信息
  多线程环境下易出错
  生成机制不太灵活
  <id generator class="increment"></id>
 *native
    适用    适用
  根据当前使用的数据库类型,自动选择其匹配的生成策略
  identity sequence hilo
 assigned
  hibernate不干预主键的生成
  需要程序员自己指定
  适用于业务主键的情况
    适用    适用
  <id generator class="assigned"></id>
 identity
    不适用    适用
  要求mysql中建的表的主键必须设置为自增列
   mysql :  id int primary key auto_increment
   sqlServer: id int primary key identity
  <id generator class="identity"></id>
 *uuid.hex
    适用    适用
  需要表中的主键必须是字符串类型
  线程安全
  <generator class="uuid.hex"></generator>
 hilo
    适用    适用
  要求必须额外提供一个单行单列单值表
  <generator class="hilo"></generator>
  +表名为hibernate_unique_key,列名为next_hi

  <generator class="hilo">
    <param name="table">my_hilo_table</param>
    <param name="column">my_hi</param>
    【<param name="max_hi">10</param>】
  </generator>
  +自定义表
 seqhilo
    适用    不适用
  <generator class="hilo">
    <param name="sequence">my_seq</param>
    【<param name="max_hi">10</param>】
  </generator>
  +自定义序列
 foreign
    适用    适用
  只能用在一对一主键共享中
  <id generator class="foreign">
   <param name="property">当前类中的关系属性名</param>
  </id>  

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

原创粉丝点击