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了。



本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/382195,如需转载请自行联系原作者

相关文章
|
5月前
|
存储 缓存 Java
Hibernate - Session方法与持久化对象详解
Hibernate - Session方法与持久化对象详解
76 0
|
11月前
|
SQL Java 数据库连接
Hibernate中的Session对象
Hibernate中的Session对象
58 0
|
消息中间件 JavaScript 小程序
MybatisPlus 使用 saveOrUpdate() 方法踩坑记录(慎用)
MybatisPlus 使用 saveOrUpdate() 方法踩坑记录(慎用)
|
Java 数据库连接
Hibernate-02-实现添加操作
Hibernate-02-实现添加操作
|
缓存 安全 Java
Hibernate Session和Jpa EntityManager
本文主要比较一下二者操作实体类的方法的关系和区别。 本文适用 Hibernate:4.3.11.Final 和 spring-data-jpa:1.10.4.RELEASE 。
1956 0
|
SQL Java 数据库连接
Hibernate之saveOrUpdate
一个PO有三种状态: 1、未被持久化的VO 此时就是一个内存对象VO,由JVM管理生命周期 2、已被持久化的PO,并且在Session生命周期内 此时映射数据库数据,由数据库管理生命周期 3、曾被持久化过,但现在和Session已经detached了,以VO的身份在运行 这种和Session已经detached的PO还能够进入另一个Session,继续进行PO状态管理,此时它就成为PO的第二种状态了。
1061 0