hibernate之数据存储

1,session.save();

方法用于实体对象到数据库的持久化操作,Session.save()方法调用与实体对象所匹配的Insert SQL作用相同,将数据插入到数据库表中!

		TUser user = new TUser();;
		user.setName("keith ");
	        user.setAge(new Integer(18+i));
		user.setInfo("the stu No is:");

		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
                session.save(user);
		session.getTransaction().commit();	

 创建user对象,启动Transaction,之后通过save()方法将user进行保存;

在保存的其中,主要包含一下的几个步骤:

  1. 在session内部缓存中寻找待保存对象(如果有,则认为此对象已经被保存了,实体对象处于Persistent状态),直接返回;
  2. 如果实体对象实现了lifecycle接口,则调用待保存对象的onSave方法;
  3. 如果实体类实现了Validatable接口,则调用其Validatable()方法;
  4. 调用对拦截器的Interceptor.onSave()方法(如果有的话);
  5. 构造Insert SQL并加以执行;
  6. 记录插入成功,user.id属性被设定为insert操作返回的新纪录id值;
  7. 将user放入内部缓存里(不会将实体对象放入二级缓存,通过save方法保存的实体对象,在事务剩余的部分中被修改的几率会很高,缓存的频繁更新,以及数据同步问题的代价会很大);
  8. 如果存在级联关系,对级联关系进行递归处理;

2,session.update()

		TUser user = new TUser();
		user.setName("given");
		session.save(user);
		session.getTransaction().commit();
		
		user.setName("kkk");
		session.update(user);
		session.getTransaction().commit();

 在update方法中,将一个Detached状态的对象与Session重新关联起来,从而使之变成Persisent状态;

包含以下步骤:

  1. 首先,根据待更新实体对象的Key,在当前session的内部缓存中进行查找,如果发现,则认为当前对象已经是处于Persisent,返回(对于一个Persisent状态的对象,update对他不起作用);
  2. 初始化实体对象的状态信息(作为之后脏数据检查的依据),并将其纳入内部缓存,这里Session.update()并没有发出Update SQL语句,而是在Session.getTransaction().commit()的情况下,才发出语句;

3,session.saveOrUpdat()

		TUser user = new TUser();
		user.setName("given");
		session.saveOrUpdate(user);
		session.getTransaction().commit();

 上面代码的执行步骤:

  1. 首先在Session内部缓存中进行查找,如果发现则直接返回;
  2. 执行实体类对应的Interceptor.isUnsaved()方法(如果有的话),判断对象是否为未保存状态;
  3. 根据unsaved-value判断对象是否处于未保存状态;
  4. 如果对象未保存(Transient),则调用save()方法保存对象;
  5. 如果对象已保存(Detached),则调用update()方法更新对象;

在开发中,我们可以通过接口约定业务逻辑和持久层的交互方式,如:

public interface TUserDAO{
       public TUser getTUser(Integer id);
       public void saveUser(TUser user);
}
 

当调用saveUser()时,我们不知道穿过来的User是什么样一个状态;这个时候我们就可以用saveOrUpdate()方法,如果传过来的对象是Transient状态,就用save()方法,如果是Detached状态,我们就应该调用update()方法;

SAP物料主数据表结构全解析:ABAP开发与MM模块必知必会 本文深入解析SAP物料主数据的核心表结构,涵盖MARA、MAKT、MARC、MARD及MVKE等关键表。详细阐述了物料主数据在ABAP开发和MM模块中的存储逻辑与关联关系,帮助开发者和顾问高效处理数据查询、增强功能及业务故障排查,是掌握SAP物料管理基础的必读指南。 阅读详情

相关推荐

AFC自动售检票系统与人工智能AI结合的关键应用方案

针对售检票、大客流管理、设备运维及服务优化提供了可落地的技术支持和实现细节,可作为地铁智慧交通项目的实践参考

leijinquan01的博客 1513

Hibernate保存的两个方法

Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯。另一方面,save()和 persist()方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对

桃欢李笑 1892

STM32硬件SPI驱动W5500以太网模块全流程(附避坑指南)

本文详细介绍了STM32硬件SPI驱动W5500以太网模块的全流程,包括硬件架构设计、SPI接口选型、官方驱动移植、网络协议栈配置与优化等关键步骤。通过实战案例和性能对比数据,帮助开发者快速实现稳定高效的网络连接,特别提供了常见问题排查指南和性能调优技巧。

weixin_29194693的博客 268

Hibernate数据保存

Hibernate数据保存——Session.save Session.save方法用户实体对象到数据库的持久化操作。也就是说,Session.save方法调用与实体对象所匹配的Insert SQL,将数据插入库表。Session.save方法中包含了以下几个主要步骤: 1. 在Session内部缓存中寻找待保存的对象。内部缓存命中,则认为此数据已经保存(执行过insert操作),实体对象...

wenwenye820526的博客 625

用Python和NumPy可视化理解波函数:从概率密度到薛定谔方程的可视化教程

本文通过Python和NumPy实现量子力学波函数的可视化,从概率密度到薛定谔方程的动态演化,帮助读者直观理解量子态的特性。教程涵盖无限深势阱、量子谐振子等模型,结合代码示例展示时间演化和期望值计算,为量子力学学习提供实用工具。

weixin_27303545的博客 226

使用TEA5767和stm32制作一台数字FM收音机

本节我们来使用stm32控制一款集成收音机芯片TEA5767,来制作一台FM收音机。 TEA5767是一款低功耗立体声收音IC,接收频率76MHz~108MHz(适应日本/美国/欧洲各FM频段选择)并可以使用软件进行静音和消除噪音。 主要电性能指标:工作电压:2.5V~5.0V,工作电流10mA,立体声分离度30dB,信噪比60dB,输出信号电平75mV。支持I2C总线通信、3-wire总线。 1)硬件设计 TEA5767芯片外围需要搭配较多的电阻、电容、电感、晶振等器件,而且高频电路的PCB设

小白白学电子 1万+

Hibernate学习笔记(一):hibernate 的开发步骤(保存数据)

项目结构: 1、导入 jar 包: 2、写实体类对象:Employee.java package com.hibernate.demo; import java.util.Date; /** * 实体类 对象 */ public class Employee { private int empId; private String empName; p...

秋忆夏伤的博客 1245

【计算机科学导论实验】加法图灵机模拟 题解

本文提供计算机科学导论课程“图灵机加法器”实验的个人思路,仅供参考。

Chavapa's blog 2578

使用Hibernate进行对象数据持久化储存

1、ORM ORM(Object Relationship Mapping,对象关系映射),利用面向对象编写的应用最终将对象信息保存在关系型数据库中。但是如果直接在应用中编写底层数据库相关的SQL语句会使程序过分依赖特定数据库,不利于程序的移植与扩展,而且不同数据库的SQL语法不同,相同的功能在不同的数据库中有不同的实现方式,因此需要ORM框架实现面向对象与数据存储的分离。 Hibernate...

theVicTory的博客 1400

第1课:开篇扫盲——OpenClaw是什么?能帮你解决什么问题?(入门必看)

核心目标:学会安装、卸载、管理OpenClaw技能,自定义AI代理的性格与权限,让AI贴合自己的使用习惯。核心内容技能市场详解:ClawHub市场核心技能分类(办公、学习、开发、生活),热门技能推荐(web-search、文件处理、邮件管理)[superscript:3][superscript:4]。技能安装与卸载:终端命令实操(openclaw skill install/uninstall),技能更新与版本管理[superscript:3]。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1757

【ChangeCLIP】Remote sensing change detection with multimodal vision-language representation learning

ChangeCLIP论文及代码使用详解。持续更新变化检测最新论文,欢迎订阅本专栏。

向上生长的程序媛的博客 1337

模拟Hibernate数据保存操作

模拟Hibernate数据保存操作 Hibernate的数据保存是自动进行的,即我们在向数据库保存数据时不需要进行SQL语句的编写,只需要将数据保存在实体类中,通过org.hibernate.Session的save(Object obj)方法即可实现向数据库的保存操作,下面我们来自己模拟Hibernate的这种功能。 首先我们自己定义hbm.xml文件的结构: <?xml version=...

Nicholas_GUB的博客 416

基于单片机的智能体重秤设计与嵌入式程序实现

智能体重秤的基本功能是测量用户的体重,并将数据通过无线方式传输到终端设备(如智能手机、电脑或云平台)进行管理。体重测量:实时测量用户体重,并进行数据存储。BMI(体质指数)计算:基于体重和身高计算BMI值,帮助用户了解健康状况。多用户管理:通过蓝牙或Wi-Fi技术支持多用户体重数据记录。健康数据分析:结合历史数据分析体重变化趋势。语音播报:通过语音播报用户体重,便于老人或视力不便的人士使用。数据同步:通过App或云平台同步数据,进行长期健康监控。

2201_76125393的博客 1755

面向NoSQL数据存储的Hibernate对象映射

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2011/07/hibernateogm近日,Hibernate Validator、Hibernate Search等项目的开发者Emmanuel Bernard宣布

张龙(风中叶)的专栏 6350

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

javaweb--struts+Hibernate把表单数据存储到数据库

struts+Hibernate把表单数据存储到数据库有一个比较简单和容易入门的方法。 1.首先,新建表单页面:index.jsp 大概代码如下: 用户名 密码 2.然后配置struts2(建立struts.xml): 步骤为:项目右击-----myEclipse----addStrutsCapabilitie

lilingmei000的博客 1681

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

hibernate的数据默认存储位置_MYSQL数据存储位置迁移

一、打开MYSQL并登陆自己的数据库使用下面查询语句查询:show variables like '%dir%';得到数据库文件配置信息:二、停止数据库以管理员权限启动CMD输入net stop mysql如果遇到以下提示,可以通过服务来确定本机中MYSQL服务的名称,我的电脑上叫做MYSQL80服务名无效。 请键入 NET HELPMSG 2185 以获得更多的帮助。C:WINDOWSsyst...

weixin_39767121的博客 142

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

如何让我自己的普通程序难懂起来(3)--数据存储框架Hibernate

入职不久,我所了解的数据存储框架周边常用到的有两种:Hibernate和Mybatis。对于这两种框架的区别,简单了解到的是Hibernate较重,学习成本较高,但功能也比Mybatis强大一点。由于对Mybatis不甚了解,没法展开对比。由于自己的业务用的框架是Hibernate,平时总是浅尝则止,了解业务,走读代码的时候遇到DAO层就犯怵。所以这篇主要是想记录我在网上所学到的关于Hibernate框架的一些基础知识,便于理解后续的如何给普通的程序以及Spring框架整合上Hibernate,这样就告别s

h230300016的博客 253

hibernate mysql 视图查询_Java 测试Hibernate+Mysql简单的数据存储

想使用Hibernate框架,在网上看了一个Hibernate学习视频,试着做了一个小小的Java连接数据库的操作,Java初学者一个,大家多多包涵开发环境:1.安装MySql,2.安装了Eclipse+插件hibernatetools-Update-4.1.2插件3.java包导入1.hibernate-core  2.Junit4.0  3.mysql思路:1.配置Hibernate配置文件/...

weixin_31201481的博客 207

ogm session_Hibernate OGM:降低进入NoSQL的障碍

本月初,公众首次看到了一个面向NoSQL的全新Hibernate项目: Hibernate Object Grid Mapping(OGM)。该项目旨在提供将数据存储到NoSQL存储中的JPA引擎,并且第一个Alpha版本用于为2011年JBoss世界主题演讲提供动力。 JAXenter与JBoss平台架构师以及Hibernate Search和Hibernate Validator创始人Em...

324

Hibernate中SessionFactory的作用

Hibernate的核心接口之一    SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。 这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时, 可以为每个数据库指定一

IT_COOKIE_SAM的博客 1320

hibernate连接oracle的问题

<br />1、主键映射问题:<br />hibernate连接oracle有两种方式,一种是制定sequence的名字 如:<br />< id name="id" column="ID"> < generator class="sequence"> < param name="sequence">DEPARTMENT_ID_SEQ< /param> < /generator> < /id>   <br /><br />如果要使用native,则必须创建名为HIBERNATE_SEQUENCE 的sequ

gplxbxc的专栏 647

hibernate mysql json_java – 使用hibernate将Json数据存储到Mysql 5.7数据库或从中检索Json数据...

我将开始一个项目,我需要生成动态谷歌表单.这个项目的要求是我需要使用mysql 5.7,以便我可以使用json数据类型来存储/检索json数据.我很好.我知道,有可能使用HQL.但我无法弄清楚如何使用对象关系映射实现Hibernate?有任何想法吗 ?提前致谢 !解决方法:最近我解决了类似的任务.我想现在为时已晚,但也许有人觉得这很有用.简短回答:您应该创建必须实现org.hibernate.us...

weixin_36081327的博客 856

原来HIBERNATE还可以这样用啊。。。动态表名

最近发现HIBERNATE可以动态更换表名,真不简单,下面把原代码贴出来供参考:public class ReportDBApi {  private SessionFactory sessionFactory = null;  public ReportDBApi(){    createSession();  }  public void createSession(){    D

jbgtwang的专栏 937

第二章开启Hibernate项目--使用xml文档配置Hibernate项目

第二章:Hibernate的应用举例 本章使用Eclipse创建一个Maven项目的基础上,提供Hibernate的实际应用参考,在开始本章前,您应当安装了Eclipse,并在Eclipse上配置了Maven插件。按照如下步骤,您可以实现您的第一个Hibernate项目。 如果您没有Maven插件,那么创建一个普通的java项目,之后将提到的jar文件引入java路径即可。 2.

Junit的博客 447
上一篇: hibernate之延迟加载(Lazy Loading)
下一篇: Hibernate之海量数据操作
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值