JPA中为什么要序列化实体类

在之前开发项目中,我对序列化并没过多的关心,只知道怎么去用,但为什么用就不太清楚了。经过学习有所心得分享出来。

对于序列化我们首先要明白什么是序列化,序列化就是将对象的属性转换成一种可以传输读写的过程。通常情况下,实体对象的所有字段都会被序列化。

那为什么要序列化呢?

一般程序在运行中产生的对象会随着程序的停止而消失,那我们怎么去存储这些对象呢?就好比实体类的字段,在项目中你需要将字段存储到相应的数据库中,那么序列化就可以帮你解决存储问题。之所以要序列化是因为有时候对象需要在网络上传输,传输的时候需要这种序列化处理,从服务器数据库上把序列化的对象取出,然后通过网络传到客户端,再由客户端把序列化的对象读入内存,执行相应的处理。简单来说序列化就是让将对象转换成字节码,而反序列化就是将序列化的过程反过来。

怎么用序列化呢?

@Entity
public class xxxx extends BaseEntity implements Serializable {

	private static final long serialVersionUID = 1L;

一般对于实体类我们会选择去继承Serializable接口,这样默认会生成一个SerialVersionUID,通过判断实体类的 serialVersionUID 来验证版本一致性的。在进行反序列化 时,JVM 会把传来的字节流中的 serialVersionUID 与本地相应实体类的 serialVersionUID 进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现InvalidCastException的异常。

当然呢serialVersionUID=1L是默认生成的,我们也可以自定义这个。因为默认生成的serialVersionUID对class类的细节很敏感,所以我们最好根据具体需求去自定义一个,以免程序报错。

当然我们对于一些字段不需要序列化的可以采用

@JSONField(serialize = false)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

"匠"人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值