介绍

Hibernate将开发人员的思维方式从SQL语句转移到实体状态转换。 一旦实体由Hibernate主动管理,所有更改将自动传播到数据库。

操作域模型实体(及其关联)比编写和维护SQL语句容易得多。 如果没有ORM工具,则添加新列需要修改所有关联的INSERT / UPDATE语句。

但是,Hibernate也不是灵丹妙药。 Hibernate并没有使我们摆脱担心实际执行的SQL语句的麻烦。 控制Hibernate并不像人们想象的那么简单,并且必须检查 Hibernate代表我们执行的所有SQL语句 。

实体陈述

如前所述,Hibernate监视当前连接的实体。 但是,要使实体成为受管理实体,它必须处于正确的实体状态。

首先,我们必须定义所有实体状态:

  • 新建(临时):从未与Hibernate会话(也称为持久性上下文)相关联且未映射到任何数据库表行的新创建的对象被视为处于“ 新建(临时)”状态。需要显式调用EntityManager#persist方法或使用可传递持久性机制。
  • 持久性(托管): 持久性实体已与数据库表行关联,并由当前运行的持久性上下文进行管理。 对此类实体所做的任何更改都将被检测到,并传播到数据库(在会话刷新期间)。 使用Hibernate,我们不再需要执行INSERT / UPDATE / DELETE语句。 Hibernate采用“事务后写”工作方式,并且在当前Session刷新时间的最后一个负责时刻同步更改。
  • 分离:关闭当前正在运行的持久性上下文后,所有先前管理的实体都将分离 。 不再跟踪连续的更改,也不会自动进行数据库同步。要将分离的实体与活动的Hibernate会话相关联,可以选择以下选项之一:
    • 重新连接
  • 删除:尽管JPA要求只允许删除管理实体 ,但是Hibernate也可以删除分离的实体 (但只能通过Session#delete方法调用)。删除的实体仅计划删除,并且将执行实际的数据库DELETE语句在会话刷新期间。

实体状态转换

要更改一个实体状态,我们需要使用以下实体管理接口之一:

  • 实体管理器
  • 届会

这些接口定义了实体状态转换操作,我们必须显式调用以将实体状态更改通知给Hibernate。 在刷新时,实体状态转换会具体化为数据库SQL语句(INSERT / UPDATE / DELETE)。

翻译自: https://www.javacodegeeks.com/2014/07/a-beginners-guide-to-jpahibernate-entity-state-transitions.html

JPA / Hibernate实体状态转换的初学者指南相关推荐

  1. hibernate jpa_JPA / Hibernate实体状态转换的初学者指南

    hibernate jpa 介绍 Hibernate将开发人员的思维方式从SQL语句转移到实体状态转换. 一旦由Hibernate主动管理实体,所有更改将自动传播到数据库. 操作域模型实体(及其关联) ...

  2. JPA/Hibernate实体类定义联合主键@IdClass注解的使用

  3. jpa和hibernate_JPA和Hibernate级联类型的初学者指南

    jpa和hibernate 介绍 JPA将实体状态转换转换为数据库DML语句. 由于对实体图进行操作很常见,因此JPA允许我们将实体状态更改从父级传播到子级 . 通过CascadeType映射配置此行 ...

  4. JPA和Hibernate级联类型的初学者指南

    介绍 JPA将实体状态转换转换为数据库DML语句. 由于对实体图进行操作很常见,因此JPA允许我们将实体状态更改从父级传播到子级 . 通过CascadeType映射配置此行为. JPA与Hiberna ...

  5. hibernate jpa_JPA /Hibernate刷新策略初学者指南

    hibernate jpa 介绍 在我以前的文章中,我介绍了实体状态转换 对象关系映射范例. 当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句. Hibernate的刷新行为并 ...

  6. JPA /休眠刷新策略初学者指南

    介绍 在我之前的文章中,我介绍了实体状态转换 对象关系映射范例. 当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句. Hibernate的刷新行为并不总是像人们想象的那么明显. ...

  7. JPA persistence.xml 文件初学者指南

    介绍 在本文中,我将解释 JPA persistence.xml配置文件的用途,以及如何使用可用的 XML 标记或属性设置 Java Persistence 应用程序. 虽然 Spring 应用程序可 ...

  8. hibernate实体的几种状态

    http://fojian.iteye.com/blog/420141 hibernate实体的几种状态: 实体的生命周期中,实体主要经过瞬时(Transient),托管(Attatched或Mana ...

  9. hibernate实体的几种状态:

    hibernate实体的几种状态: 实体的生命周期中,实体主要经过瞬时(Transient),托管(Attatched或Managed),游离(Detached)和销毁(Removed)四个状态. 瞬 ...

最新文章

  1. 03Template Method模式
  2. docker保存linux镜像,docker导入导出容器和保存加载镜像
  3. matlab 极坐标作图polar
  4. snmpwalk用法
  5. DOM的事件函数this和className等样式注意点
  6. linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件
  7. 【转】前端精选文摘:BFC 神奇背后的原理
  8. 几个重要库函数的实现
  9. 【Deep Learning 三】神经网络中的非线性激活函数之间的优缺点:sigmoid、tanh、ReLu、Leaky ReLu...
  10. 阿尔派X09电脑调音软件 DSP调音软件下载
  11. 【Java web】Servlet面试题
  12. 谈谈我对《ThoughtWorks文集》中多语言开发部分的看法
  13. 基于51单片机的步进电机驱动程序
  14. 网上图书订阅系统的WBS图,和WBS字典
  15. pentaho mysql_pentaho5.0.1,mysql5 配置,安装
  16. 精益产品开发体系最佳实践及原则
  17. redis 集群详解及搭建过程
  18. GO语言开源项目TOP 100
  19. 程序员平时都是木讷的,但是谈到计算机或者程序的时候简直就是天才—兼借题发挥,谈谈语言及工具的选择...
  20. padavan mysql_newifi3 用Padavan(老毛子)固件 搭建web 尝试

热门文章

  1. 2018蓝桥杯省赛---java---C---8(等腰三角形)
  2. 2018蓝桥杯省赛---java---C---1(哪天返回)
  3. SQL注入问题及预防方法
  4. 在dialog中使用EditText键盘弹不起来的解决方法
  5. 虚拟机安装CentOS-7-x86_64-DVD-1708说明
  6. 面试项目 java-服务端 18h58
  7. android 按键消息,在android中模拟键盘消息(shell命令的方法)
  8. ReviewForJob(3)表、栈和队列
  9. java求期望_Java 11的期望
  10. gc 堆外_GC解释:堆