hibernate04 持久化类和持久化对象
来源:互联网 发布:淘宝一元捡漏 编辑:程序博客网 时间:2024/06/15 11:11
一、持久化
所谓持久化就是将内存中的数据永久的存储到关系型数据库中
二、持久化类
1、持久化类的定义
一个java类与数据库中的某个表建立了映射关系,那么这个java类就是持久化类
2、持久化类的编写规则
①、持久化类需要提供公共无参的构造方法
因为 Hibernate 中需要通过反射来生成持久化类的实例
②、持久化类的属性需要定义为私有的,并提供get、set方法
因为 HIbernate 的底层会对查询的数据进行封装(属性的赋取值即调用get、set方法)
③、持久化类要有一个唯一标志OID与表的主键对应
Hibernate 中需要通过这个唯一标志OID来区分内存中是否是同一个持久化对象。
④、持久化类尽量不使用final来修饰
因为Hibernate中有延迟加载的机制,该机制中会产生代理对象,Hibernate产生代理对象使用的是字节码的增强技术完成的,其实就是产生了当前类的一个子类对象来实现的。如果使用了final,则不能产生子类,从而就不会产生代理对象,那么HIbernate的延迟加载策略就会失效。
⑤、持久化类的属性要尽量使用包装类的类型
使用基本类型的包装类型一个好处是,可以区分数据是没有传值默认生成的,还是本身就是这个默认值,比如一个表示数量的整数类型,如果使用int,没有传值时, 数据库中会出现0,如果使用Integer,没有传值时,数据库中是null。
三、持久化对象
1、持久化对象的三种状态:
①、瞬时(临时)状态:就一个普通的对象,既没有关联Session,也没有OID(持久化标识),与数据库中的数据无任何关联。
②、持久化状态:对象关联了Session,并且具有一个OID,在数据库中有对应的记录。
③、游离状态:当某个持久化状态的实例跟Session的关联被关闭的时候就变成了托管状态。游离状态对象存在OID,并且仍然跟数据库中的数据存在关联,但是失去了与当前Session的关联,游离状态对象发生改变时不能被Hibernate检测到。
public void test_01(){ Configuration configuration = new Configuration().configure(); SessionFactory sessionFactory= configuration.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Customer customer = new Customer();//此时只是一个普通的对象,既没有关联session,也没有OID,所以是瞬时状态 customer = session.get(Customer.class, 1L);//此时通过get方法,让customer既关联了session,也拥有了OID(1L),与数据库中的某条记录想对应,所以是持久化状态 transaction.commit(); session.close();//此时session关闭,customer失去了与session的关联,但是仍然拥有OID,所以是游离(脱管)状态 }
状态流转图:
2、持久化对象能够自动更新数据库
public void test_02(){ Configuration configuration = new Configuration().configure(); SessionFactory sessionFactory= configuration.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Customer customer = new Customer(); customer = session.get(Customer.class, 1L); customer.setCustName("AAAA"); transaction.commit();//提交之前并没有执行session.update()操作,但是会将更改的数据同步到数据库中 session.close(); }
- hibernate04 持久化类和持久化对象
- hibernate持久化类&持久化对象(五)
- 对象持久化
- 对象持久化操作
- 对象持久化
- 操纵持久化对象
- 操纵持久化对象
- delphi对象持久化
- Hibernate持久化对象
- 操纵持久化对象
- 持久化Lua对象
- hibernate 持久化对象
- 持久化对象生命周期
- 对象持久化
- 操纵持久化对象
- 对象持久化是什么意思?
- java对象持久化
- 对象持久化
- numpy.savez
- 【Android】这效果,我没法描述
- 图像和流媒体 -- 帧率、分辨率、码流的概念和关系
- 获取Java生成二维码所需要的Jar包(zxing方式)
- 虚拟机并行环境的安装
- hibernate04 持久化类和持久化对象
- 122. Best Time to Buy and Sell Stock II
- Solutions For Building 10G Home Network
- Developing Transactional Microservices Using Aggregates, Event Sourcing and CQRS
- 邻接表
- bzoj 1008
- 神技:压缩包转为图片
- Java 8中HashMap源码解析
- Google Guava学习(7)-Guava集合工具 Bimap接口