Hibernate5的持久化对象基础知识

本文深入探讨了Hibernate5中持久化对象的概念,包括其对应数据库表的关系、设计原则及三种状态:临时态、持久态和脱管态的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Hibernate5的应用程序中,每一个数据库中的表都对应一个持久化对象(PO)。持久化对象可以看成是与数据库表相映射的Java对象。最简单的持久化对象对应着数据库中某个表中的一条记录,多个记录可以对应持久化对象的集合。持久化对象中不应该包含任何对数据库的操作。
我可以举一个例子:

package PO;

public class UserInfoPO {
	private int id;
	private String userName;
	private String password;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

上面就是一个持久化对象,该持久化对象对应着数据库中的info表,info表有3个字段:id(int类型)、userName(varchar类型)和password(varchar类型)。定义持久化对象应遵循以下三个规则:

  1. 为持久化字段声明私有属性且提供getter和setter方法。
  2. 实现一个无参的构造方法。
  3. 提供一个标识符属性。

下面我再来说一说Hibernate5的持久化对象的状态
Hibernate5的持久化对象有三种状态:临时状态(临时态)、持久状态(持久态)和脱管状态(脱管态)。
1、临时态
由new命令开辟内存空间刚生成的Java对象处于临时态。
例如:UserInfoPO ui=new UserInfoPO();
临时对象在内存中是孤立存在的,它是携带信息的载体,不和数据库的数据有任何关联关系。

2、持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标记。如果使用Hibernate5的delect()方法,对应的持久化对象就变成临时对象,因数据库中的对应数据已被删除,该对象不在于数据库的记录关联。
当一个Session执行close()或clear()之后,持久对象会变成脱管对象。此时该对象虽然具有数据库识别值,但它已不再Hibernate5持久层的管理之下。
持久化对象具有如下特点:

  1. 与Session实例关联
  2. 在数据库中由于它关联的记录。

3、脱管态
当与某持久对象关联的Session被关闭后,该持久对象转变为脱管状态。当脱管状态被重新关联到Session上时,将再次转变成持久状态。
脱管状态拥有数据库的标识值,可通过update()、saveOrUpdate()、lock()方法等方法,转变成持久对象。
脱管对象具有如下特点:

  1. 本质上与临时状态相同,在没有任何变量引用它时,JVM会在适当的时候将它回收。
  2. 比临时状态多了一个数据库记录标识值。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值