`
747017186
  • 浏览: 329894 次
社区版块
存档分类
最新评论

hibernacle中涉save方法与缓存机制

 
阅读更多

hibernacle添加方法与缓存是很有意思的一件事,前一段时间做项目遇到了。下面看列子:

 

@Primary
@Repository("baseDao")
public class BaseDaoImpl<T> implements BaseDao<T> {

	@Autowired
	private SessionFactory sessionFactory;

	private SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	private Session getCurrentSession() {
		return sessionFactory.getCurrentSession();//得到当前的session
	}

	public Serializable save(T t,Puser puser) {
		Serializable s = this.getCurrentSession().save(this.getCurrentSession().merge(t));
		setLog(t, "新增", puser);
		return s;
	}

	public void update(T t,Puser puser) {
		this.getCurrentSession().update(this.getCurrentSession().merge(t));
		setLog(t, "更新",puser);
	}
}

 Serializable s = this.getCurrentSession().save(this.getCurrentSession().merge(t));

观察这一句,save方法当中有一个merge方法,这个方法是从hibernate缓存当中去寻找(根据这个对象的主键去寻找),如果再缓存当中找到了则替换缓存当中的对象并且保存到数据库当中,这样一种情况下即使两个对象的主键相同也不会报主键冲突异常,仅仅是替换而已。

 

如果想要数据库的主键约束生效该怎么办?

Serializable s = this.getCurrentSession().save(t);

直接放入t,如果是这样hibernate不会去缓存里面去寻找,而是直接存入数据库。

 

分享到:
评论

相关推荐

    Hibernate的缓存机制.docx

    当执行诸如save、saveOrUpdate、get、load、list或iterator等方法时,Hibernate会自动将对象放入一级缓存。用户无法直接操作一级缓存内容,但可以通过flush()、evict()和clear()方法间接管理。flush()用于使缓存与...

    Hibernate缓存机制解说

    当应用程序通过Session的save()、update()、saveOrUpdate()、get()或load()等方法操作数据时,如果目标对象尚未存在于缓存中,Hibernate将自动将其加载至缓存内。Session提供了evict()和clear()两个方法用于管理缓存...

    Unity3D插件EasySave3中文入门教程

    EasySave3是Unity3D的一款强大而易于使用的数据存储插件,用于游戏和应用开发中的数据保存与加载。该插件提供了非常简单和直观的API来保存和加载数据,而不需要开发者关心数据是如何存储到磁盘上的。使用EasySave3...

    mysql 原生语句中save 的写法汇总.docx

    MySQL 原生语句中 save 的写法汇总 在 MySQL 中,save 操作是经常遇到的场景,特别是在 UPDATE 和 INSERT 操作中。使用 Hibernate 可以使用 saveOrUpdate 方法,但是使用原生 SQL 语句时,该如何实现 save 操作呢?...

    hiberante 代码save方法过程,分析

    hiberante 代码save方法过程,分析

    Android canvas.save()和canvas.restore()的理解

    `save()`和`restore()`是`Canvas`中两个非常关键的方法,它们主要用于管理绘图状态,确保复杂绘图过程中的可逆性和精确性。在本文中,我们将深入理解这两个方法的作用以及如何在实际应用中使用它们。 首先,`canvas...

    Django model重写save方法及update踩坑详解

    在Django框架中,Model是数据操作的核心,它与数据库表结构相对应。有时,我们需要在保存或更新数据时执行一些额外的操作,如数据验证、计算或其他业务逻辑。本篇文章将详细讲解如何重写Django Model的`save()`方法...

    html中的内容直接下载到excel中,替换 document.execCommand(‘saveAs’)方法

    传统的做法是使用`document.execCommand('saveAs')`方法,但这个方法在某些现代浏览器中已被废弃,因此需要寻找替代方案。本篇文章将详细探讨如何在不依赖`execCommand('saveAs')`的情况下,实现HTML内容直接下载到...

    Hibernate缓存机制

    - 执行`save()`、`update()`、`saveOrUpdate()`等操作时,如果使用`load()`、`get()`、`list()`、`iterate()`等方法,则可能会触发缓存的刷新。 - 在调用`flush()`方法时,会将Session内的状态同步到数据库,并且...

    Easy Save 2.8.4p1_unity3d_EasySave2数据保存插件_

    《Unity中的EasySave2数据保存插件:全方位解析与应用》 在Unity游戏开发中,数据保存和加载是不可或缺的功能,它确保了玩家的游戏进度得以持久化,为用户提供连续的游戏体验。EasySave2是一款专为Unity设计的数据...

    详解SpringBoot实现JPA的save方法不更新null属性

    Spring Boot 中 JPA 的 save 方法不更新 null 属性解决方案 知识点 1: JPA 的 save 方法的问题 在 Spring Boot 中使用 JPA 时,直接调用原生 Save 方法会导致 null 属性覆盖到数据库,使用起来十分不方便。这是...

    Easy Save 3.zip

    本文将深入探讨Easy Save 3的核心功能、使用方法以及在项目中的实际应用。 首先,Easy Save 3通过其易用的API简化了数据保存和加载的过程。它支持多种数据类型,包括基本类型(如整数、浮点数、字符串等)、Unity...

    Unity插件-Easy Save 3.3.2版本.zip

    在Unity开发过程中,数据的保存与加载是必不可少的功能,尤其在游戏存档、用户进度保存等方面显得尤为重要。Easy Save就是一款专为Unity设计的便捷存档和加载插件,旨在简化这一过程,提高开发效率。本文将详细探讨...

    Easy Save v3.5.3 unity 插件 简单保存

    Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save Easy Save ...

    Unity 插件 Easy Save 2 插件 亲测好用 放心下载

    Easy Save 2 是一款专为 Unity 3D 开发的游戏数据保存和加载插件,它极大地简化了在 Unity 中处理游戏进度、用户设置和其他数据的工作流程。Unity 是一个广泛使用的跨平台游戏开发引擎,它提供了丰富的功能和工具,...

    WWW Power Save and Legacy Power Save(有中文的)

    这种机制对于那些不连续或者间歇性使用的设备非常有效,比如智能家居设备或办公室的打印机。WWW Power Save通过优化无线网络的睡眠和唤醒周期,实现了高效能与低能耗的平衡。 **Legacy Power Save**,则通常指的是...

    EasySave3.0.7z unity很多人使用的 数据保存插件

    《Unity EasySave3:全能数据保存插件的深度解析与应用》 Unity,作为全球领先的实时3D创作工具,广泛应用于游戏开发、视觉特效、建筑可视化等领域。在这些项目中,数据保存是不可或缺的一部分,它涉及到游戏进度、...

    matlab开发-AUTOSAVE

    在MATLAB编程环境中,"AUTOSAVE"是一个重要的功能,它允许用户自动保存工作区中的变量,以防意外关闭或程序崩溃导致数据丢失。这个压缩包包含两个文件:`autosave.m`和`license.txt`。 `autosave.m`是MATLAB的M文件...

    android中canvas的save和restore用法

    `restore()`方法与`save()`相对应,用于恢复`Canvas`到之前保存的状态。当你调用`save()`后,可以进行一系列改变状态的操作,如平移、旋转、缩放、裁剪等。当这些操作完成后,调用`restore()`可以撤销这些改变,使`...

Global site tag (gtag.js) - Google Analytics