`
lanhuidong
  • 浏览: 227266 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hibernate——关于save和persist

阅读更多

 

@Test
    public void testSave(){
        DomesticCat cat = new DomesticCat();
        cat.setId(101);
        cat.setName("Hello kitty");
        cat.setSex('M');
        cat.setBirthday(new Date());
        Transaction tx = session.beginTransaction();
        session.save(cat);
        System.out.println(cat.getId());
        tx.commit();
    }
    
    @Test
    public void testPersist(){
        DomesticCat cat = new DomesticCat();
        cat.setId(100);
        cat.setName("Jscis");
        cat.setSex('F');
        cat.setBirthday(new Date());
        Transaction tx = session.beginTransaction();
        session.persist(cat);
        System.out.println(cat.getId());
        tx.commit();
    }

1. 如上的测试代码,其实id是数据库自动生成的,使用save方法保存时,id并不是程序中设置的值,而是数据库自动生成的。而persist方法则认为要保存的是Detached状态的对象,会抛出异常PersistentObjectException

 

2.save方法保证马上返回标识符,而persist方法并不保证,但是在测试中persist好像也是马上返回标识符的,可能是我不知道如何测试,还望高手指教

 

3.当代码中去掉Transaction tx = session.beginTransaction();和tx.commit();时,persist不会执行insert语句,而save会执行。

分享到:
评论

相关推荐

    Hibernate使用——入门

    - **Create**:使用`Session.save()`或`Session.persist()`方法创建新记录。 - **Read**:`Session.get()`或`Session.load()`用于根据主键获取对象,`Session.createQuery()`或`Session.createNativeQuery()`进行更...

    struts2+hibernate整合例子——新闻管理系统

    总结来说,"struts2+hibernate整合例子——新闻管理系统"是一个典型的Java Web应用示例,展示了如何利用Struts2的MVC模式和Hibernate的ORM能力,实现对新闻数据的CRUD操作及高级查询。这个系统可能包含了Action类、...

    hibernate code.rar

    在这个“hibernate code.rar”压缩包中,我们很可能会找到关于Hibernate的视频教程——"hibernate介绍与动手入门体验.avi",这个资源将引导我们深入了解Hibernate的核心概念和实际应用。 首先,让我们谈谈Hibernate...

    Hibernate4总结文档

    - 创建(Create):通过`Session.save()`或`Session.persist()`方法将对象插入数据库。 - 读取(Read):使用`Session.get()`或`Session.load()`根据ID获取对象,`Query`接口则提供了更灵活的查询方式。 - 更新...

    Hibernate手把手教学

    - 创建(CREATE):使用Session的save()或persist()方法持久化对象。 - 读取(READ):通过Session的get()或load()方法查询对象。 - 更新(UPDATE):调用对象的set方法修改属性,然后使用Session的update()方法保存...

    hibernate.zip

    2. **配置文件**: 在使用Hibernate时,通常需要两个主要的配置文件——`hibernate.cfg.xml`和实体类对应的`hibernate-mapping.xml`。前者用于配置数据库连接信息,后者定义实体类与数据库表的映射关系。 3. **实体...

    精通Hibernate

    持久化操作主要包括保存(save()或persist())、更新(update())、删除(delete())和加载(get()或load())。此外,Hibernate还提供了 Criteria API 和 HQL(Hibernate Query Language)来进行更复杂的查询。 六、级联...

    Hibernate_Hospital_Database:Hibernate MySQL 小项目——医院数据库

    7. **持久化操作**:使用Hibernate进行数据操作,如保存(Save或Persist)、更新(Update)、查询(Query或Load)、删除(Delete)等,可以通过方法调用完成,简单直观。 8. **HQL与Criteria查询**:Hibernate提供...

    hibernate_jar

    5. **实体生命周期管理**:Hibernate负责管理对象的生命周期,包括持久化、临时、游离状态,并提供save(), saveOrUpdate(), persist(), merge(), update(), delete()等方法来处理对象的状态变化。 6. **关联映射**...

    精通hibernate源码ch6

    常见的级联类型有:SAVE_UPDATE、DELETE、ALL、PERSIST等。 五、懒加载(Lazy Loading) 为提高性能,Hibernate支持懒加载机制。属性或关联关系不会在实体加载时立即加载,而是在第一次访问时才通过代理对象动态...

    hibernate+状态详解

    除了这些基本状态,还有一种特殊的状态——临时态(New Persistent),它是在调用Session的persist()方法时产生的,与瞬时态类似,但它在事务提交时会自动变成持久态。 理解Hibernate对象状态对于优化应用性能至关...

    Hibernate Part 2:单表CRUD

    首先,我们需要理解Hibernate的核心概念——实体(Entity)和实体类(Entity Class)。实体是数据库表的映射,而实体类是实体的Java表示形式。一个典型的实体类会使用`@Entity`注解标识,并通过`@Table`注解指定对应...

    hibernate 简约范例

    它提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及Criteria API,以替代传统的SQL语句。 ### 2. 安装与配置 在开始之前,需要在项目中添加Hibernate的依赖库,这通常通过Maven或Gradle来完成...

    Hibernateghfd串讲.rar

    事务的四大特性——原子性、一致性、隔离性和持久性(ACID)在Hibernate中得到了很好的实现。 十、缓存机制 Hibernate提供了第一级缓存(Session缓存)和第二级缓存(可选),以及查询缓存。缓存能显著提升数据访问...

    Hibernate数据库elcentr

    1. **保存(Create)**:使用`Session.save()`或`Session.persist()`方法将对象插入数据库。 2. **读取(Read)**:`Session.get()`根据主键获取对象,`Session.load()`延迟加载,`Session.createQuery()`或`Session...

    支持多数据库的ORM框架ef-orm.zip

    事实上针对单个对象的get/load/persist/save/update/merge/saveOrUpdate API和Criteria API本来就为一体,只不过是历史的原因被人为割裂成为两套数据库操作API罢了。  因此,对于关系型数据库而言——Entity和...

Global site tag (gtag.js) - Google Analytics