hibernate持久化类和一级缓存
Posted 奇迹再现
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate持久化类和一级缓存相关的知识,希望对你有一定的参考价值。
持久化类编写规则
1.有无参构造函数。
2.属性不能被final修饰。
3.对外提供属性的get和set方法。
4.需要提供一个持久化OID对象唯一标识对象。
主键生成策略
<!-- <generator class="native"/>包括sequence和 identity--> <!-- <generator class="increment"/>适用于单线程使用,采用hibernate主键生成策略,最大id加1成为新的id--> <!--<generator class="identity"/>使用数据库底层主键生成策略,id自动增长,适用于mysql--> <!--<generator class="sequence"/> 适用于oracle --> <!--<generator class="uuid"/> 适用于使用字符串当主键 --> <!--<generator class="assigned"/> 用户自定义主键生成策略 ,手动生成id-->
持久化类三种状态
1.瞬时态,没有OID标识,没有被Session管理。
2.持久态,有OID持久化标识,被Session管理。
3.托管态,有OID持久化标识,没有被Session管理。
hibernate的一级缓存
hibernate的一级缓存是session级别的缓存,随着session的创建而产生,随着session的清除而消失,一级缓存的作用是从内存中读取数据,而不需要从硬盘中读取数据,如果一个对象的标识在缓存中存在,下次获取数据从缓存中获取,插入数据如果对象已经存在,则不发送sql语句,如果不存在,需要发送sql语句。这是利用一级缓存的快照区实现的。
package hibernate; import java.io.Serializable; import org.hibernate.Session; import org.hibernate.Transaction; public class hibernateDemo3 { public static void main(String[] args) { Session session = hibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer1 = (Customer) session.get(Customer.class, 1l); customer1.setCust_name("666"); System.out.println(customer1); transaction.commit(); session.close(); } }
在第一次修改的时候,是发送了update语句,第二次执行的话快照区已经存在这个对象数据,就不会发送update语句。
以上是关于hibernate持久化类和一级缓存的主要内容,如果未能解决你的问题,请参考以下文章