当前位置:首页 > 开发 > 编程语言 > Hibernate > 正文

对Hibernate缓存机制的理解

发表于: 2015-06-15   作者:归来朝歌   来源:转载   浏览:
摘要: 在hibernate中session一级缓存机制中,有这么一种情况: 问题描述:我需要new一个对象,对它的几个字段赋值,但是有一些属性并没有进行赋值,然后调用 session.save()方法,在提交事务后,会出现这样的情况: 1:在数据库中有默认属性的字段的值为空 2:既然是持久化对象,为什么在最后对象拿不到默认属性的值? 通过调试后解决方案如下: 对于问题一,如你在数据库里设置了

在hibernate中session一级缓存机制中,有这么一种情况:

问题描述:我需要new一个对象,对它的几个字段赋值,但是有一些属性并没有进行赋值,然后调用

session.save()方法,在提交事务后,会出现这样的情况:

1:在数据库中有默认属性的字段的值为空

2:既然是持久化对象,为什么在最后对象拿不到默认属性的值?

通过调试后解决方案如下:

对于问题一,如你在数据库里设置了字段的默认值,但是hibernate并不知道你不设置该属性字段的值就要用表中字段默认值,那么,你要进行如下配置:

<class  name="entity.Product" table="t_product" dynamic-insert="true">

 说明你要动态的插入你在数据库中设置好的默认值

效果显示:

测试前:

5 高尔夫球 20.3 15-6月 -15 -

测试后

6 高尔夫球 20.3 15-6月 -15 未知生产地

 

对于问题二,因为在你调用sava方法后,hibernate将此对象放入到它的容器中,对象从游离态转化为

持久化状态,但并不代表你在提交事务后,就能将默认字段的值自动映射到被持久化映射的对象中。

你不执行和该对象有关的CRUD业务时,hibernate不会将默认值和该对象的属性值所对应。最后,你

再调用一次session.get()方法后,可以发现对象和有默认属性相对应的字段有你设置的默认值了~

追加一下,也可以使用session.refresh()方法将数据库中的数据同步到缓存中~

 

最后,可以通过这个场景加深session一级缓存机制的理解,总结下面对缓存机制,应该有如下的思考:

 

(1)怎么样从缓存中提取出对象

(2)当缓存中的对象和数据库中的数据不一样的时候,怎么样把缓存中的数据同步到数据库中

(3)当缓存中的对象和数据库中的数据不一样的时候,怎么样把数据库中的数据同步到缓存中

 

对Hibernate缓存机制的理解

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一级缓存、二级缓存和查询缓存 1 一级缓存是指session缓存,当同一个session查询相同数据时,可以直
临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态
Hibernate二级级缓存 上篇介绍了Hibernate一级缓存,主要是session缓存,session生命周期结束,缓存
Hibernate查询缓存 我们介绍了Hibernate一级缓存,二级缓存。而hibernate二级缓存时针对Id查询的缓
Hibernate一级缓存 缓存就是你去小卖铺买东西,不用再去生产车间里买东西,当小卖铺倒闭了,也就是s
脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会
如果你还在为理解hibernate的缓存机制而去查阅大量的资料,然后看这些资料你又觉得头疼,那就可以看
本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后
一、对象的三种状态 1、暂时态:当对象刚创建,和Session没有发生任何关系时,当程序运行完就即刻消
参考文章:关于hibernate的缓存使用 这篇博文已经说的很详细,不过我这里还有一些补充说明的。 ——
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号