对Hibernate缓存机制的理解

在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)当缓存中的对象和数据库中的数据不一样的时候,怎么样把数据库中的数据同步到缓存中

 

你可能感兴趣的:(session,一级缓存,对象持久化)