对Hibernate缓存机制的理解

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

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

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

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

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

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

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

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

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

效果显示:

测试前:

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

测试后

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

 

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

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

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

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

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

 

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

 

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值