0 0

关于hibernate修改数据的疑惑0

各位大神,请教一个关于hibernate修改数据的问题,看代码

    public void addUser(){
        System.out.println("begin.......");
        Session session = null;
        Transaction transaction = null;
        session = SessionFactoryUtil.getSessionFactory().openSession();
        transaction = session.beginTransaction();
        System.out.println("开始修改用户信息");
        User u = (User)session.get(User.class, 2);
        u.setUsername("ddTest");
        session.saveOrUpdate(u);
        System.out.println("修改用户信息成功。。。。");
        transaction.commit();
        session.close();
        System.out.println("end.......");
    }

这样可以把一个ID为2的用户数据name改为ddTest,没有什么疑问。再看

    public void addUser(){
        System.out.println("begin.......");
        Session session = null;
        Transaction transaction = null;
        session = SessionFactoryUtil.getSessionFactory().openSession();
        transaction = session.beginTransaction();
        System.out.println("开始修改用户信息");
        User u = (User)session.get(User.class, 2);
        u.setUsername("ddTest");
        //session.saveOrUpdate(u);
        System.out.println("修改用户信息成功。。。。");
        transaction.commit();
        session.close();
        System.out.println("end.......");
    }

这样,不用saveOrUpdate,数据一样被成功修改。这是为什么呢?是事务在提交时把一级缓存里的对像flush到数据库了吗?那如果这样的话要saveOrUpdate之类的方法还有什么用呢?求高手大神解惑,小弟在此感谢。

2015年1月09日 15:05

2个答案 按时间排序 按投票排序

0 0

采纳的答案

你没有分清Hibernate里面实体的状态,你这两个例子里面实体的状态都是“持久”的状态(都是你刚查出来的,实体是在session里面持久态的)
考虑如果是从画面取来的值,设置到了实体里面,这时候这个实体是和session脱离的“瞬时”状态,这种东西用saveOrUpdate才有意义。

你可以看看Hibernate的API的程序,当你传进saveOrUpdate方法的实体是一个“持久”状态的实体,那么它什么都不做的,就和你第二个例子相同。

如果你传入的是一个“瞬时”态的东西,比如你新做出来的,或者从别的已经close的session里面查出来的东西,那么再调用它就有意义了。
他会看ID是否有,来决定做更新还是插入,还会去检查版本号(如果你配置了版本检查的话)。。。等等一系列动作。

2015年1月09日 15:46
0 0

hibernate的update方法不是sql update的替代品或者翻译。

hibernate屏蔽了你直接操作数据库操作sql。

update也好,直接set也好,你修改的目标都是内存中的某个对象模型,而hibernate会将这个对象的修改同步到数据库。

2015年1月09日 23:51

相关推荐

    spring3+springmvc+jpa+hibernate多数据源

    "spring3+springmvc+jpa+hibernate多数据源"是一个示例项目,它演示了如何在一个应用中集成Spring 3、Spring MVC、JPA 2.0以及Hibernate,以实现对多个数据源的支持。下面将详细介绍这些技术及其集成的关键点。 **...

    hibernate入门数据简单插入

    这个文件可能包含了关于Hibernate入门的初步讲解,包括基本概念、环境配置、简单数据插入的示例代码等。 **总结** Hibernate作为Java的ORM框架,简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层...

    spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码

    在这个项目中,我们有两个主要的数据访问技术:Hibernate和MyBatis,它们都是Java领域中广泛使用的ORM(对象关系映射)工具。 **Hibernate** 是一个强大的ORM框架,它允许开发者通过Java对象来操作数据库,而无需...

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

    以下是一些关于如何在Hibernate环境下优化批量数据处理的策略。 首先,了解问题的根源。在上述例子中,当尝试向数据库插入100,000条数据时,由于默认情况下Hibernate会将所有持久化对象保留在一级缓存中,随着数据...

    Hibernate 显示数据库数据

    【标题】"Hibernate 显示数据库数据" 在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以用Java对象来操作数据库记录。本教程针对初学者,将介绍如何使用...

    配置hibernate数据源

    关于Hibernate的更多高级特性,例如二级缓存、拦截器和事件监听机制等,可以在学习Hibernate的官方文档或相关书籍中深入了解。通过上述步骤的详细讲解,希望读者能够掌握Hibernate数据源的配置方法,并成功应用于...

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

    在SSH CRM项目中,Hibernate作为持久层框架,用于管理和操作数据字典,是数据库与Java对象之间的一个桥梁。本节将深入探讨SSH CRM项目中Hibernate如何实现数据字典的高效、便捷操作。SSH架构是由Spring、Struts和...

    基于Hibernate的数据持久层关键技术的研究

    ### 基于Hibernate的数据持久层关键技术的研究 #### 一、引言 随着软件开发的不断进步和技术的发展,越来越多的企业级应用需要高效地管理和访问大量数据。为了更好地满足这一需求,许多开发团队选择了使用ORM...

    Spring+Hibernate多数据源

    接着,描述中的"Spring+Hibernate多数据源的整合实现demo"意味着这是一个实际操作的示例,它可能包含了一个或多个配置文件和Java代码,展示了如何在Spring Boot或者传统的Spring环境下配置和使用多数据源。...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO层使用`HibernateDaoSupport`进行操作,而非使用JPA(Java Persistence API)。 首先,让我们了解Spring Boot 2.0的...

    Hibernate中大量数据的更新

    Hibernate 中大量数据的更新 Hibernate 是一个流行的基于 Java 的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在将大量数据插入到数据库时,Hibernate 经常会出现性能和...

    Hibernate 数据持久化

    **Hibernate 数据持久化详解** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本篇文章将...

    Hibernate数据类型映射关系

    关于Hibernate的基本数据类型与Java中基本数据类型的映射关系

    Hibernate数据持久化技术

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

    Hibernate配置数据源.

    ### Hibernate配置数据源详解 #### 一、引言 在软件开发过程中,特别是涉及大量数据库交互的应用场景下,选择合适的数据源配置对于提高系统性能、稳定性具有重要意义。Hibernate作为Java领域内广泛使用的对象关系...

    Hibernate基本数据操作方法

    Hibernate基本数据操作方法 java struts hibernate

    hibernate多数据库配置

    在上面的配置中,我们使用 DynamicDataSource 作为 Hibernate 的数据源, Hibernate 将根据当前的数据库连接信息选择对应的数据源。 使用 Spring 框架和 Hibernate,我们可以轻松地配置多数据库连接信息,并自由...

    Hibernate插入数据

    以上就是关于“Hibernate插入数据”的核心知识点,希望对你在学习过程中有所帮助。在共享和交流知识的过程中,我们可以共同进步,不断提升IT技能。同时,为了保护个人作品,使用水印是一种有效的手段,但也要确保不...

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

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

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

    关于工具的使用,Hibernate提供了hibernate.cfg.xml配置文件或基于Java的配置方式来设置数据库连接参数、实体类扫描路径等。同时,它还提供了SessionFactory、Session、Transaction等接口,供开发者进行数据库操作。...

Global site tag (gtag.js) - Google Analytics