`
icyheart
  • 浏览: 777484 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate中saveOrUpdate()使用时要注意的问题

阅读更多

       在Hibernate中saveOrUpdate()方法在执行的时候,先会去session中去找存不存在指定的字段,如果存在直接update,否则save,这个时候问题就发生了。

      有两张表,表A和表B,这两张表的主键都是一样的,例如都是MASTER_ID,同时对应的BO里面属性都是masterID,现在要执行的操作是,以MASTER_ID为条件将表A中的数据查询出来,然后将部分值插入到表B中,然后再更新表B,在查询表A后,session中已经存在masterID了,这个时候再去对表B进行savaOrUpdate的时候,Hibernate会发现session中已经存在masterID了,所以执行的就是update,但是实际上表B中根本不存在masterID这个值,当你执行完查询数据库的时候会发现没有插入数据,像这种情况,就得先用masterID对表B进行查询,当返回的BO为NULL时,new一个新BO然后再进行插入,这个时候用到的就是createbo了。

分享到:
评论
13 楼 icyheart 2009-12-18  
http://sucre.iteye.com/admin/blogs/551040好了问题解决了
12 楼 icyheart 2009-12-18  
linliangyi2007 写道
首先Hibernate中一个主键只对应一个表,这是模型上的概念,你怎么能让一个主键在两个表中存储,然后再说人家的saveorupdate有问题,根本就是你没搞清楚hibernate对主键的约束啊

我的问题中写的很清楚,是两个表的主键名相同,并不是"一个主键在两个表中存储"
11 楼 linliangyi2007 2009-12-17  
首先Hibernate中一个主键只对应一个表,这是模型上的概念,你怎么能让一个主键在两个表中存储,然后再说人家的saveorupdate有问题,根本就是你没搞清楚hibernate对主键的约束啊
10 楼 icyheart 2009-12-17  
kjj 写道
linliangyi2007 写道
楼主对Hibernmate的ORMapping就没搞清楚啊,两张表映射一个对象啊,有问题啊

lz 好好看看这位仁兄的提醒吧
ps: 两张表对应相同主键 的情况多了,谁都像你这样!!

是,两张表对应相同主键的情况是多了,但是单独存在是没有任何问题的,你可以去试试,在我说的这种情况下,是不行的,我两张表怎么可能映射一个对象
9 楼 kjj 2009-12-17  
linliangyi2007 写道
楼主对Hibernmate的ORMapping就没搞清楚啊,两张表映射一个对象啊,有问题啊

lz 好好看看这位仁兄的提醒吧
ps: 两张表对应相同主键 的情况多了,谁都像你这样!!
8 楼 icyheart 2009-12-17  
linliangyi2007 写道
楼主对Hibernmate的ORMapping就没搞清楚啊,两张表映射一个对象啊,有问题啊

我没有两张表映射一个对象,只不过是这两张表分别映射的对象中,两个属性相同而已,就像这样:a对象中有一个masterId,b对象中也有一个masterId
7 楼 icyheart 2009-12-17  
满月无双 写道
确实是个问题????楼主好像也没说说该怎么解决!!

先去用masterid去查询数据库,确实为null时,再insert
6 楼 linliangyi2007 2009-12-17  
楼主对Hibernmate的ORMapping就没搞清楚啊,两张表映射一个对象啊,有问题啊
5 楼 满月无双 2009-12-17  
确实是个问题????楼主好像也没说说该怎么解决!!
4 楼 chenzengpeng 2009-12-17  
为啥要用这个方法呢?
完全可以自己判断到底要save还是update,再调对应的方法嘛。。。
3 楼 icyheart 2009-12-17  
当然可以啦
2 楼 zygjavae 2009-12-16  
可不可以完全不用saveOrUpdate方法啊
1 楼 dieslrae 2009-12-16  
我一般都很少用saveOrUpdate o(╯□╰)o

相关推荐

    Hibernate save() saveorupdate()的用法第1/2页

    ### Hibernate中的`save()`与`saveOrUpdate()`方法详解 #### 一、概述 在Java持久化框架Hibernate中,`save()`与`saveOrUpdate()`是非常重要的两个方法,它们用于处理对象的持久化操作。理解这两个方法的工作原理...

    hibernate 中文文档 and _annotation.chm

    - 开启二级缓存:提高数据读取速度,但需注意缓存一致性问题。 - 使用懒加载(Lazy Loading):按需加载关联对象,减少内存消耗。 - 选择合适的查询方式:HQL和Criteria通常比直接执行SQL更为高效。 通过阅读...

    Hibernate中对象的三种状态

    在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一。理解并掌握对象的三种状态对于开发高效、稳定的数据库应用至关重要。本篇将详细阐述Hibernate中的瞬时态、持久态和脱管态,以及它们之间的转换。 ...

    hibernate 事务管理注意事项

    本文将围绕“hibernate 事务管理注意事项”这一主题展开讨论,通过对给定文件中的标题、描述、标签以及部分内容的分析,深入探讨在实际应用中需要注意的关键点。 #### 一、AH业务逻辑实现模式 1. **如果未使用事务...

    Hibernate持久化对象的生命周期

    这在并发编程中尤其需要注意,因为它可能导致数据一致性问题。 此外,Hibernate提供了级联操作,允许一个持久化对象的操作影响与其关联的其他对象。例如,如果一个持久化对象包含一个临时对象,并且配置了级联保存...

    hibernate many-to-many级联保存,级联更新,级联删除

    请注意,级联删除可能引起数据丢失,因此在使用时需谨慎。 七、代码示例 以下是一个简单的Java代码示例,展示了如何使用Hibernate进行Many-to-Many关系的级联操作: ```java SessionFactory sessionFactory = ...;...

    hibernate中文参考文档

    3. 使用二级缓存提升性能,但注意缓存同步问题。 4. 对于大对象,考虑使用懒加载策略。 5. 使用批处理更新和插入提高性能。 综上所述,Hibernate中文参考文档将全面介绍这些概念和用法,帮助开发者更好地理解和使用...

    Hibernate说明

    Hibernate是Java领域中一款著名的开源对象关系映射(ORM)框架,它允许开发人员使用面向对象的编程方式来操作数据库,极大地简化了Java与数据库之间的交互。本篇将深入探讨Hibernate的核心概念、主要功能以及使用...

    hibernate3使用手册

    以上是对Hibernate3的一些基础知识点的介绍,通过深入学习《Hibernate3使用手册》中的内容,开发者可以更好地掌握这个强大的ORM工具,从而提升Java应用的数据处理效率和灵活性。对于《hibernate3[1].2参考.pdf》和...

    hibernate的各种保存方式的区别

    - **何时使用`saveOrUpdate()`**:当不确定对象的状态时使用,它可以自动判断并采取相应的操作。 - **何时使用`merge()`**:当需要将游离状态的对象重新关联到`Session`时使用。 - **何时使用`flush()`**:当需要...

    如何解决hibernate自动更新实体类的问题共5页.pd

    9. **使用乐观锁**:通过添加版本号或时间戳字段,利用Hibernate的乐观锁机制,在更新时检查数据是否被其他事务修改过,从而避免并发更新问题。 10. **使用SQL更新语句**:在某些情况下,可以使用原生的SQL更新语句...

    HIbernate 中文帮助文档

    Hibernate是一款开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中使用面向对象的方式操作数据库。这款强大的工具简化了数据库访问的复杂性,将数据库操作转换为对Java对象的操作,使得开发过程更为...

    hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate

    - 注意:在 Hibernate 中,不能直接写成 `s.banjiId = b.banjiId`,而应该用 `s.banji.banjiId = b.banjiId` 来确保正确的关联。 - **执行 HQL** - 可以通过 `Session.createQuery` 创建 `Query` 对象,然后调用 ...

    Hibernate3.3 中文参考

    - HQL与SQL的异同,以及如何在HQL中使用复杂的查询结构。 5. ** Criteria API** - Criteria API 提供了一种动态构建查询的方式,避免硬编码HQL。 - DetachedCriteria 和 Criteria 的使用,以及它们在复杂查询中...

    hibernate框架基础教程适合新手

    缓存能提高性能,但需注意并发控制和数据一致性问题。 9. **集合映射** Hibernate支持一对一、一对多、多对一和多对多关系映射,如List、Set、Map等集合类型,通过配置XML映射文件来实现复杂的数据结构。 10. **...

    hibernate3.1.2参考文档

    注意,类中应有一个无参数的构造器,以方便Hibernate通过反射进行实例化。 3. Hibernate配置 - Hibernate配置文件(hibernate.cfg.xml):这是连接数据库、定义实体类和指定其他配置的中心文件。你需要在其中指定...

    Hibernate4实战 之第七部分

    为了避免脏读或并发问题,建议在每次请求开始时使用新`Session`并调用`Session.merge()`或`Session.saveOrUpdate()`来与数据库同步。 #### 在两层结构中使用长持久上下文 在两层架构下,为了提高可扩展性,可以...

    hibernate缓存的问题

    二级缓存中的数据有效性由Hibernate自动维护,当执行save()、update()、saveOrUpdate()、load()、get()等操作时,对象状态会与数据库同步,包括二级缓存。但若通过JDBC直接操作数据库,Hibernate无法感知这些变化,...

    hibernate5.2.12源码包

    8. **延迟加载(Lazy Loading)**:Hibernate支持懒加载策略,即关联的对象在需要时才加载,避免了内存浪费和性能问题。 9. **事件监听器**:通过实现特定接口并注册到SessionFactory,可以监听实体的生命周期事件...

Global site tag (gtag.js) - Google Analytics