Hibernate开发和对象状态

Hibernate开发三种方式

1、由Domain object -> mapping->db。(官方推荐)

2、由DB开始,用工具生成mapping和Domain object。(使用较多)

3、由映射文件开始。

PS:这里讲解第一种开发方式,第三种不讲,第二种在这篇博客:Hibernate入门有讲解。

由Domain object -> mapping->db。(官方推荐)

由POJO生成DB的方式,是Hibernate官方推荐的方式,一般习惯还是先由DB->POJO,但这并不代表POJO->DB这种方式不重要,这种方式才是更符合面向对象思想的方式。

详细步骤

1、写出Domain类属性,生成相应getter,setter。

2、配置Xxx.hbm.xml映射文件。

3、配置hibernate.cfg.xml配置文件。

hibernate配置文件的配置

通过在<session-factory>元素下添加<property name="hbm2ddl.auto">配置值</property>来实现自动从POJO到数据库表。

4种配置值详解

create : 当我们的应用程序加载hibernate.cfg.xml [ new Configuration().config(); ]就会根据映射文件,创建出数据库,每次都会重新创建,原来表中的数据就没有。

update: 如果数据库中没有该表,则创建,如果数据库中表已经存在了,配置文件改变了(增加了一个属性,相当于再数据库中加了一个字段)那么update会自动在数据库中加上这个字段。

create-drop: 在显示关闭 sessionFactory时,将drop掉数据库的schema。

validate: 每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致。

这里有四个配置值: create , update , create-drop, validate

PS:一般情况下不推荐用create,create-drop这两种配置值,因为它们会删掉之前的数据,如果有特殊需求,可以尝试使用,一般来说用得最多的是update,因为它不会影响之前的数据。

domain对象的细节

1、需要一个无参的构造函数(用于hibernate反射该对象)。

2、应当有一个无业务逻辑的主键属性。

3、给每个属性提供get、set方法。

4、在domian对象中的属性,只有配置到了对象映射文件后,才会被hiberante管理。

5、属性一般是private范围。

对对象关系映射文件的说明

对象关系文件中,有些属性是可以不配,hibernate会采用默认机制,比如<class name=”?” table=”?” >中table值不配,则以类的小写做表名,也就是name属性的值小写形式。<property type=”?”>中 type不配置,则hibernate会根据类的属性类型,选择一个适当的类型。这些可以参考官方文档。

对象状态

Hibernate中对象状态有三种,瞬时态(transient)、持久态(persistent)、托管/游离态(detached)。

对象状态原理图

实际案例表示图

对象状态详解

瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。

持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。

脱管/游离(detached):数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到。

注意事项:

1、脱管状态的实例可以通过调用save()、persist()或者saveOrUpdate()方法进行持久化。

2、持久化实例可以通过调用 delete()变成脱管状态。通过get()或load()方法得到的实例都是持久化状态的。

3、脱管状态的实例可以通过调用 update()、saveOrUpdate()、lock()或者replicate()进行持久化。

4、游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例。

----------参考《韩顺平.hibernate从入门到精通》

Hibernate开发和对象状态相关推荐

  1. Hibernate 几种对象状态

    Hibernate 中四种对象状态 临时状态(transient):刚用new 语句创建,还没有被持久化,并且不处于Sesssion 的缓存中.处于临时状态 的Java 对象被称为临时对象. 持久化状 ...

  2. Hibernate_2_Hibernate中对象状态及转化_一级缓存_Session详解_HQL/SQL/Criteria_一对多关系_级联操作

    Hibernate中的对象状态 在Hibernate中持久化对象具有三种状态: 瞬时态, 持久态, 游离态. 瞬时态: 对象没有与Hibernate产生关联(transient,session中没有缓 ...

  3. Hibernate学习笔记_核心幵发接口及三种对象状态

    核心接口开发  (重点)                                                  一,  Configuration a)   AnnotationConfi ...

  4. 5 -- Hibernate的基本用法 --5 3 改变持久对象状态的方法

    1. 持久化实体 Serializable save(Object obj) : 将obj对象变为持久化状态,该对象的属性将被保存到数据库. void persist(Object obj) : 将o ...

  5. (转)Hibernate框架基础——在Hibernate中java对象的状态

    http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...

  6. Hibernate持久化对象状态

    在Hibernate中,持久化对象再被操作过程中分为三个时期.这三个时期和session周期相关. 各自是瞬时(Transient),持久太(persistent)和游离态(Detached) 瞬时状 ...

  7. Hibernate对象状态

    Hibernate对象状态 在hibernate中有三种状态:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persisten ...

  8. Hibernate第七篇【对象状态、一级缓存】

    前言 本博文主要讲解Hibernate的细节-->对象的状态和一级缓存- 对象状态 Hibernate中对象的状态: - 临时/瞬时状态 - 持久化状态 - 游离状态 学习Hibernate的对 ...

  9. Hibernate→HQL、query.list()返回数据类型、查询相关语句、分页、原生SQL、@注解、持久化对象状态及生命周期、一多关系、继承映射关系、逆向工程

    HQL Query实例与表 session通用工具类 Query对象 from 类→List<类>接收 映射类 仅查询商品 查询商品及所在商家 别名 返回数据类型定义 Iterator接收 ...

最新文章

  1. 基于httpd建立私有CA实现https加密连接
  2. Linux内核设计与实现 总结笔记(第五章)系统调用
  3. Kafka如何做到全局有序
  4. 设计模式 抽象工厂(Abstract Factory Pattern)
  5. Ubuntu中使用dnw工具:没有找到/dev/secbulk0
  6. climbing-stairs-动态规划,爬楼梯的路径数
  7. Visio简单画图使用方法
  8. 瑞友虚拟化系统搭建服务器,瑞友云电脑虚拟化系统 | 瑞友天翼-应用虚拟化|远程接入|桌面虚拟化|国内虚拟化整体解决方案领导者...
  9. uniapp,vue学习笔记
  10. ios 裁剪圆形头像_iOS如何将图片裁剪成圆形
  11. 蓝桥杯——罗马数字转换器
  12. html给页面添加艺术型边框,如何为2016word的页面设置艺术型页面边框
  13. 惠普服务器报no bootable device were detected. Please attach a uefi.......处理
  14. 企业视频远程办公会议通话系统EasyRTC在Windows2012部署运行出现“计算机中丢失VCRUNTIME140.dll”如何解决?
  15. wordpress怎么将文章发布在指定页面?
  16. android第三方播放器--饺子播放器的使用
  17. pyecharts js 地图无法显示 Map china not exists the geoJson of the map must be provided
  18. make时 No rule to make target错误解决办法
  19. 7-16 然后是几点(15 分)
  20. linux清除碎片命令,Linux磁盘碎片快速清理工具Kleandisk (2)

热门文章

  1. 解决硬盘文件目录损坏且无法读取
  2. java反射随意值_Java反射总结
  3. 内网学习之MySQL服务提权
  4. php常用判断蜘蛛的代码
  5. C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)
  6. js向页面中动态添加脚本
  7. react可视化_如何使用React和Popmotion.io可视化煎饼算法
  8. 计算机网络应用简介_计算机网络简介
  9. 渗透测试 已学课时 1 个_我14岁上创业课时学到的东西
  10. django 最佳实践_通过这些最佳实践来改进Django项目