我的日常

登录/注册
您现在的位置:论坛 资料库 JAVA开发 > hibernate对象生命周期以及数据库配置关系
总共48086条微博

动态微博

查看: 1838|回复: 0

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

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-05-24 10:09:42 |只看该作者 |倒序浏览
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、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表