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

hibernate jpa

介绍

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语句在会话刷新期间。

实体状态转换

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

  • 实体管理器 jpaentitystates
  • 届会 Hibernate状态

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

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

hibernate jpa

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL容器----map

一 基本概念 1. map/multimap map/multimap属于关联式容器,底层结构是用二叉树实现。 其中所有元素都是pair, pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)&#xff0…

Spring @RequestParam批注

介绍: Spring RequestParam批注可用于在处理程序方法中提取查询参数。 在本快速教程中,我们将学习其用法。 首先让我们展示一个API,该API返回具有给定名字和年龄的用户列表: RestController public class UserController {...Ge…

win10任务栏怎样居中win10任务栏居中设定教程

win11系统内置任务栏居中的设置项,但是win10系统没有,倘若win10顾客也想让自己的任务栏居中的话,应当怎样设置呢?你先撤销任务栏锁住,随后新建菜单栏。之后选定一个空白文件夹,之后任务栏就会发生两条竖杠&…

java与java ee_RxJava + Java8 + Java EE 7 + Arquillian =幸福

java与java ee微服务是一种体系结构样式,其中每个服务都实现为一个独立的系统。 他们可以使用自己的持久性系统(尽管不是强制性的),部署,语言等。 由于系统由一个以上的服务组成,因此每个服务将与其他服务…

【PPT】折线线条怎么画?

大家晚上好~ 今天跟大家分享3种绘制折线线条的方法。在模仿PPT的时候发现没有折线形状,这可怎么好呢? 今天带来了3种快速制作折线线条的方式,让我们一起围观学习吧~ 方法1 形状布尔运算出折线线条 在PPT默认的形状里没有折线,那…

创建通用数组的问题

在这篇文章中,我们将介绍一篇全面的文章,其中介绍了创建通用数组的问题。 Java编程语言于2004年9月在Java 5.0“ Tiger”发行版中添加了泛型。 泛型或类型参数化系统在提供类型安全性的同时扩展了Java现有的类型系统。 1.简介 Java具有Collections Fram…

Citavi阅读PDF文件中目录位置

一般阅读pdf文件,如果文件内内嵌目录数据,可以根据目录,跳转到PDF文件的对应章节。 citavi也不例外 citavi调出目录章节位置如下图所示: 1. 点击左下方的搜索框 2. 点击目录标志 即可调出目录窗口

Ubuntu下命令行解析

Linux命令通常由以下三部分组成:Command [-option] [argument] 其中,命令为程序的名称。选项和参数可以省略 选项中one dash(-)与two dashes(--)区别 使用命令时常看到有时候为选项为-,有时候…

使用JMeter进行性能测试

在开发复杂的高可用性软件项目时,性能至关重要。 在当今这样的现代时代尤其如此,除了闪电般的快速访问实时数据之外,其他任何事情都受到惩罚。 当谈论有时需要的大量数据时,这并不总是一件容易的事。 在本文中,我们将…

Unix系统用户下载内容存放位置

1.Unix文件目录含义 首先注意usr 指 Unix System Resource,而不是User 然后通常: /usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变。 /usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里&…

Linux depmod功能说明

Linux depmod 命令用于分析可载入模块的相依性。 depmod(depend module)可检测模块的相依性,供modprobe在安装模块时使用。 Linux modprobe命令用于自动处理可载入模块。 modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod…

jboss eap_带有自定义模块的JBoss EAP上的骆驼

jboss eapApache Camel —最好的开源集成库 Apache Camel是一个很棒的开放源代码集成库,可以用作ESB的主干或在独立的应用程序中进行系统的路由,转换或中介(请参阅:集成多个系统)。 Camel非常通用,不会迫使…

ubuntu下安装openMPI

首先访问openmpi官网:Openmpi 然后选择Download,进入资源下载页面。选择最新版本的openmpi 如何获得下载链接呢?将鼠标放在openmpi-4.0.5.tar.gz 上右击,然后选择复制链接地址。打开远程命令窗口,进入root或者用户模式。 (1)、下…

前6个最常用的Redis库

Redis目前 是世界上最受欢迎的键值商店, 它通过提供高速和低延迟以及针对应用程序开发人员的灵活功能集,赢得了广泛的采用率 。 Redis是一个内存数据结构存储,用作根据BSD许可分发的数据库,缓存和消息代理 。 许多领先的技术品牌…

拓扑排序算法总结

知识概览 求图的拓扑序是图的宽搜的一个很经典的应用,拓扑序列是针对有向图来说的。 拓扑序列的定义是: 如果说一个点的序列满足对于图中的每条有向边(x, y),x都出现在y的前面,那就称这个序列是这个图的拓扑序列。 备注&#xff…

Ns3使用MPI加速仿真速度

Ns3中在大规模拓扑仿真中,为加速仿真速度,可以利用MPI工具,实现多进程联合仿真。 linux系统下安装openmpi. 参考链接# ubuntu下安装openMPI成功运行ns-3中的文件 命令1:sudo gedit /etc/profile打开文件,加入ns-3的路径: 最后此文…

代码中 #ifdef注释方法的使用

1 代码中 #ifdef注释方法的使用 #ifdef的使用 #ifdef _XXXX ...程序段1... #else ...程序段2... #endif如果标识符_XXXX已经被#define定义,则编译程序段1,否则编译程序段2.#else非必须,可不存在程序段&am…

input发送a.jax_JAX-RS 2.0的新功能– @BeanParam批注

input发送a.jax至少可以说JAX-RS很棒,也是我的最爱之一! 为什么? 功能丰富 直观(因此学习曲线不那么陡峭) 易于使用和开发 具有出色的RI – Jersey , RestEasy等 有足够的JAX-RS粉丝可以添加此内容&am…

常用的\与/的区别

1 常用的\与/的区别 1.1 正斜杠/ 正斜杠"/"一般作为除法符号或者间隔符号使用,主要用于间隔使用。 在unix系统中,/ 表示目录。由于web遵循unix命名,所以在网址(URL)中,/ 表示目录 1.2 反斜杠 …

Netty Java快速指南

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 Netty是一个无阻塞的输入/输出(NIO)框架,它使开发低级网络服务器和客户端变得相对…