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)

猜你喜欢

转载自blog.csdn.net/weixin_51220967/article/details/123993552
今日推荐