汪星人 发表于 2014-5-24 10:09

hibernate对象生命周期以及数据库配置关系

hibernate对象生命周期
session缓存就是hibernate一级缓存
hibernate二级缓存就是sessionFactory
1、瞬时态(临时态)
   (a)不被session管理
   (b)数据库中没有这条记录
   (c)可以被JVM垃圾回收
2、持久态
   (a)被session管理
   (b)数据库中有记录
   (c)不可以被JVM垃圾回收
3、游离态(脱管态)
   (a)不被session管理
   (b)数据库中有记录
   (c)可以被JVM垃圾回收
   
数据库关系
*many--to --one
<!-- 配置对象关系
name="districk"对象模型关系键
column="districk_id"关系模型关系键
-->
<many-to-one name="districk" class="com.tarena.entity.Districk"
column="districk_id" />

//发生TransientObjectException
错误:持久态的对象不能引入临时状态的值

cascade="save-update"级联更新
            none不使用级联
             delete级联删除
             all 级联更新和删除级联删除
            
               
数据库关系
单项one-to-many
在one配置
<set name="streets">
<!-- 数据关系键 -->
<key column="distrck_id"/>
   <!-- 配置关系 -->
<one-to-many class="com.tarena.entity.Street"/>
</set>
单项one-to-many插入:
   1、插入街道 关系键(null)
   2、插入区县
   3、修改街道关系键(one维护)
   
单项many-to-one插入:
1、插入区县
2、插入街道(many维护)   
   
数据库关系
双向one-to-many
在one配置
<set name="streets">
       <!-- 数据关系键 -->
   <key column="distrck_id"/>
   <!-- 配置关系 -->
   <one-to-many class="com.tarena.entity.Street"/>
</set>
在many配置many-to-one
<many-to-one name="districk" class="Districk" column="distrck_id"/>
注意
one方<key column="distrck_id"/>中distrck_id必须和many方
column="distrck_id"中名字distrck_id必须一致
双向一对多
一方和多方多可以维护关系
   一般情况希望多方维护关系键
   在一方设置inverse="true"
inverse默认为false表示自己管理关系
inverse="true"表示由对方来管理关系,自己就不在管理

数据库关系
单项one-to-one
主键一对一:
   (1)没有外键列
   (2)一个表主键引用另一个表主键
1、id不能是自增
<generator class="foreign">
<!--property是固定写法 card是依赖的关系属性-->
    <param name="property">card</param>
</generator>
2、配置关联关系
注意:一对一不产生外键列
<!-- constrained="true" 添加约束 -->
<one-to-one name="card" class="com.tarena.entity.Card"
   constrained="true" />
在one-to-one中hibernate框架已经设置cascade
数据库关系
双项主键one-to-one
在Person中配置:
<generator class="foreign">
<!--property是固定写法 card是依赖的关系属性-->
<param name="property">card</param>
</generator>
在card中配置:
<!-- 没有改变关系模型 -->
<one-to-one name="person" class="com.tarena.entity.Person"/>
one-to-one在关系模型中没有添加外键列
数据库关系
单项外键one-to-one
many--to --one==》特例(many)one--to--one
外键one -to-one
many--to--one==>转化成 (unique="true")==> one--to--one

<many-to-one name="card" class="com.tarena.entity.Card"
column="card_id"unique="true"/>

数据库关系
双项外键one-to-one
many--to --one==》特例(many)one--to--one
外键one -to-one
many--to--one==>转化成 (unique="true")==> one--to--one
在Perosn配置:
<many-to-one name="card" class="com.tarena.entity.Card"
column="card_id"unique="true"/>
在Card配置:
<!--property-ref关联属性-->
<one-to-one name="person" class="com.tarena.entity.Person"
   property-ref="card" />
   
数据库关系
单项Many-to-Many
在Emp配置:
配置关系表:t_emp_project
<set name="projects" table="t_emp_project">
   <key column="emp_id"/>
   <many-to-many class="com.tarena.entity.Project" column="project_id"/>
</set>
   
数据库关系
双向项Many-to-Many
在emp配置:
<set name="projects" table="t_emp_project">
<key column="emp_id"/>
<many-to-many class="com.tarena.entity.Project" column="project_id"/>
</set>
在project配置:
<set name="emps" table="t_emp_project">
<key column="project_id"/>
<many-to-many class="com.tarena.entity.Emp" column="emp_id" />
</set>
双向多对多inverse=“true”设置到那一方都可以
页: [1]
查看完整版本: hibernate对象生命周期以及数据库配置关系