`

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()方法;

分享到:
评论

相关推荐

    spring3+springmvc+jpa+hibernate多数据源

    在IT行业中,构建一个能够处理多种数据库的数据驱动...这样的设置对于处理多样化数据存储需求的企业级应用来说非常有价值。通过学习和理解这个项目的实现,开发者可以提升自己在分布式系统设计和数据管理方面的技能。

    Hibernate之数据加载方式

    5. **缓存加载(Caching)**:Hibernate支持二级缓存,可以将经常访问的数据存储在缓存中,提高查询效率。 ### 四、关联加载优化 - **fetch join**:在HQL或Criteria查询中使用`fetch`关键字,可以将关联对象一起...

    Hibernate下数据批量处理解决方案

    在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...

    Hibernate中数据类型

    Hibernate 提供了多种数据类型,用于匹配不同数据库系统支持的标准 SQL 数据类型。这些数据类型包括: - **数值类型**:例如,`byte` 和 `java.lang.Byte` 映射到 `TINYINT`,`short` 和 `java.lang.Short` 映射到 ...

    SSH CRM 项目Hibernate操作数据字典源码(3)

    在SSH CRM项目中,数据字典通常用来存储系统中的固定配置信息,如状态码、性别选项、地区分类等。这些信息需要频繁查询但不经常更新,适合用数据字典来维护。使用Hibernate操作数据字典,可以极大地提高开发效率和...

    Spring+Hibernate多数据源

    当项目涉及到多个数据源时,如业务数据、审计数据分别存储在不同的数据库中,就需要进行多数据源的整合。本示例将探讨如何在Spring和Hibernate环境中实现多数据源的配置与管理。 首先,我们来看标题"Spring+...

    Hibernate数据持久化技术

    Hibernate是Java领域中最流行的ORM框架之一,它通过元数据来定义对象和数据库表之间的映射关系,使得Java对象可以直接被存储和检索,而无需编写大量的SQL语句。 在ORM中,POJO(Plain Old Java Object)是一个简单...

    Hibernate数据持久层jar包源码解析

    《Hibernate数据持久层jar包源码解析》 在软件开发中,数据持久层是系统架构中的关键部分,它负责将应用程序的数据与数据库进行交互。Hibernate作为一款强大的Java对象关系映射(ORM)框架,极大地简化了这个过程。...

    基于Hibernate的XML数据存储方法.pdf

    2. Hibernate的配置:Hibernate的配置文件(如hibernate.cfg.xml)是使用Hibernate进行数据存储的关键。在配置文件中,可以指定数据源、配置映射关系以及设置ORM行为等。 3. 数据映射:Hibernate需要知道对象如何...

    Hibernate 使用缓存时,数据同步问题

    当外部系统或进程直接修改了数据库中的数据,而未通过Hibernate进行同步时,Hibernate的一级或二级缓存中存储的数据可能会变为陈旧数据。这会导致应用在后续操作中读取到过时的信息,从而引发数据同步问题。 #### ...

    JAVA数据类型与Hibernate的类型映射

    而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...

    Hibernate使用——自定义数据类型

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,通过面向对象的方式处理数据。在实际项目开发中,有时我们可能需要对数据库中的某些字段使用自定义的...

    hibernate数据源

    在 Hibernate 应用程序中,数据源扮演着存储数据库连接信息的角色,包括数据库URL、用户名、密码等,使得 Hibernate 可以在运行时获取到数据库连接,执行SQL语句,并管理这些连接。 在 Hibernate 中,数据源主要有...

    hibernate query调用oracle存储过程

    Oracle数据库作为企业级的主流数据库系统,提供了丰富的存储过程和函数功能,以实现复杂的数据处理逻辑。而Hibernate作为一种流行的Java持久化框架,它允许开发者通过ORM(对象关系映射)方式与数据库进行交互。本篇...

    Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表

    MySQL是世界上最流行的关系数据库管理系统之一,它的数据类型包括数字类型(如INT、DECIMAL)、字符串类型(如VARCHAR、TEXT)、日期和时间类型(如DATE、DATETIME)以及二进制类型(如BLOB)等。 例如,Hibernate...

    hibernate调用存储过程

    ### Hibernate调用存储过程详解 在企业级应用开发中,Hibernate作为一款优秀的对象关系映射(ORM)框架,被广泛应用于Java持久层解决方案。而存储过程作为一种预编译的SQL代码块,在数据库层面执行,提供了高性能的...

    Hibernate使用存储过程

    首先,存储过程是在数据库层面预先编译好的一组SQL语句,它可以接受输入参数,处理数据,并返回结果。使用存储过程的优点包括性能提升、代码复用和安全性增强。在Oracle这样的数据库系统中,我们可以创建一个名为`...

    使用Hibernate缓存数据.ppt

    缓存的基本思想是将常用但获取成本较高的数据存储在高速访问的媒介中,以减少对低速存储(如硬盘)的访问。在Hibernate中,缓存分为一级缓存和二级缓存。 - **一级缓存**:由Session管理,是内置的,不可卸载。每个...

    hibernate调用存储过程具体方法

    hibernate本对数据库的操作有些不完美,有必要的时候可以调用存储过程来补足。

    hibernate存储过程

    在IT领域,Hibernate是一个非常流行的Java对象关系映射(ORM)...理解如何在Hibernate中操作存储过程对于Java开发人员来说是必备技能之一。通过实践和学习,你可以更熟练地结合两者,提升应用程序的性能和可维护性。

Global site tag (gtag.js) - Google Analytics