关于hibernate的saveOrUpdate方法的一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于hibernate的saveOrUpdate方法的一个问题相关的知识,希望对你有一定的参考价值。

我在dao的实现层调用了session的saveOrUpdate方法来进行保存或者更新数据,在业务层通过HQL语句查询到一条记录啊,重新set了它的一个属性,然后执行dao层的saveOrUpdate,但是不进行更新,但是加了seesion.flush()之后就更新了。在业务层我增加了事务的控制,但是在事务提交前不是默认执行力flush方法吗?为什么需要显示调用才起作用呢?

hibernate的一级缓存中,flush是清除缓存,将hibernate快照当中的数据一次性的提交的,hibernate在查询数据的时候,他只会从数据查询一次,然后将数据放到内存当中,当你在set属性时,hibernate会和内存中的做对比,如果只不一样的话,就修改其值, ession.flush清除缓存,清除缓存时就会提交事务~ 参考技术A hibernate.transaction.flush_before_completion 如果开启, session在事务完成后将被自动清洗(flush)。
hibernate.transaction.auto_close_session 如果开启, session在事务完成后将被自动关闭。
参考技术B 再加一个spring就方便多了追问

加了spring的事务控制了

追答

那就在Dao写save方法可以了

参考技术C 事务?你加入的是spring做的方法切面事务吗?追问

加了spring的事务控制了

关于框架那些事

一、SSM和SSH的区别:

1、ssh(struts,spring,hibernate):SSH通常是struts做前端控制器,spring管理各层的组件,hibernate负责持久化层。

  1.1 Struts的原理:

  1.2 hibernate的理解:

    1.2.1 定义:

    1.2.2 hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别:

    1.2.3 二级缓存:

2、ssm(springMVC,spring,mybatis):ssm通常是springMVC做前端控制器,spring管理各层组件,mybatis负责持久化层。

  2.1 对springMVC的理解:

  2.2 对spring的理解:

    2.2.1 定义:

    2.2.2 依赖注入:

  2.3 mybatis和hibernate的区别:

 

二、面向切面AOP

 

三、控制反转IOC()

 

以上是关于关于hibernate的saveOrUpdate方法的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate中saveOrUpdate()和merge()的区别

Hibernate中saveOrUpdate()和merge()的区别

jooq中hibernate的saveOrUpdate方法的等价物是啥?

hibernate save,update,saveorupdate方法有什么区别

hibernate saveOrUpdate()方法执行数据库操作不成功

在休眠 saveOrUpdate() 期间获取 org.hibernate.StaleStateException